[英]How to dynamically call a method in Objective-C using an NSString or const char *name?
我正在使用Objective-C中的動態編程做一些工作,我從頭到尾閱讀了Objective-C運行時編程指南,並且能夠完成我需要的大部分工作,但有一件事我還沒弄明白是如何動態調用方法,只要我有一個字符串表示。
本質上,我動態地進行屬性查找,以查看我的對象是否具有使用class_copyPropertyList從列表匹配的屬性,然后循環並通過從plist文件填充的NSMutableDictionary匹配這些屬性。 找到匹配項后,我想執行該屬性。 我無法提前知道可能存在哪些匹配,因為這是一個將打包到許多不同應用程序中的庫。
使用NSSelectorFromString
從NSString
創建SEL
。 然后,您可以使用performSelector
方法之一執行它。
動態設置屬性:
SEL setter = NSSelectorFromString(@"setProperty:");
[myObject performSelector:setter withObject:newValue];
動態獲取屬性:
SEL getter = NSSelectorFromString(@"property");
id myProperty = [myObject performSelector:getter];
對於更復雜的方法,您可以使用NSInvocation
和NSMethodSignature
:
SEL action = NSSelectorFromString(@"someMethod:withArguments:");
NSMethodSignature *signature = [myObject methodSignatureForSelector:action];
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
[invocation setArgument:arg1 atIndex:2]; // indices 0 and 1 are reserved.
[invocation setArgument:arg2 atIndex:3];
[invocation invokeWithTarget:myObject];
id returnedObject;
[invocation1 getReturnValue:&returnedObject];
SEL s = NSSelectorFromString(selectorName);
[anObject performSelector:s];
Apple文檔: https : //developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html#//apple_ref/c/func/NSSelectorFromString
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.