5

Belirli bir yöntemin varyantik türde olup olmadığını - çalışma zamanında - bulmanın bir yolu var mı? method_getTypeEncoding() gibi bir şey; Bu, bir metodun değişken sayıdaki argümanları kabul edip etmediğini söyleyemez. Yoksa belki de söyleyecek bir hile var mı?Bir Objective-C yönteminin çalışma zamanı sırasında değişken olup olmadığını belirleme

+1

Bu bilgiyi hangi bağlamda görmek istediğinizi biraz daha açıklayabilir misiniz? Çalışma zamanında bunu tam olarak nasıl bulacağımı tam olarak bilmiyorum ama aynı zamanda çok fazla çeşitlilikte yöntem oluşturmaya da gerek duymadım. Temel olarak ne alıyorum, belki de bilmeniz gerekmiyor ve daha büyük bir sorun var. Belki de her zaman yanılıyor olabilirim :) –

+0

Doğrulama yönteminde method_getNumberOfArguments() 'yi çağırdığınızda ne olur? Hiç denemedim, ama belki de özel bir değer döndürüyor (-1 veya bir şey gibi)? Ayrıca bkz. Method_copyArgumentType() '. – user1118321

+1

@ user1118321 'method_getNumberOfArguments', normal yöntemmiş gibi, az sayı döndürür. –

cevap

6

Robert'in yorumu doğru. Düşünün: Ben - (void)variadicMethodWithIDSentinel:(int)a, ... olarak ilan edilecek variadic yöntemini değiştirirseniz

strings asdfasdfasdf 
Boogity 
methodWithOneIntArg: 
variadicMethodWithIDSentinel: 
[email protected]:8i16 
[email protected]:[email protected] 
Hello, World! 

, strings çıkışı olur: Ortaya çıkan ikili üzerinde strings Running

@interface Boogity 
@end 
@implementation Boogity 
- (void)methodWithOneIntArg:(int)a {;} 
- (void)variadicMethodWithIDSentinel:(id)a, ... {;} 
@end 

üretir (ayrıca stok main() yoktu)

Boogity 
methodWithOneIntArg: 
variadicMethodWithIDSentinel: 
[email protected]:8i16 
Hello, World! 

Yani, hayır, söyleme yolu yok.