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
5
A
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.
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 :) –
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
@ user1118321 'method_getNumberOfArguments', normal yöntemmiş gibi, az sayı döndürür. –