簡體   English   中英

如何使用NSString或const char * name動態調用Objective-C中的方法?

[英]How to dynamically call a method in Objective-C using an NSString or const char *name?

我正在使用Objective-C中的動態編程做一些工作,我從頭到尾閱讀了Objective-C運行時編程指南,並且能夠完成我需要的大部分工作,但有一件事我還沒弄明白是如何動態調用方法,只要我有一個字符串表示。

本質上,我動態地進行屬性查找,以查看我的對象是否具有使用class_copyPropertyList從列表匹配的屬性,然后循環並通過從plist文件填充的NSMutableDictionary匹配這些屬性。 找到匹配項后,我想執行該屬性。 我無法提前知道可能存在哪些匹配,因為這是一個將打包到許多不同應用程序中的庫。

使用NSSelectorFromStringNSString創建SEL 然后,您可以使用performSelector方法之一執行它。

動態設置屬性:

SEL setter = NSSelectorFromString(@"setProperty:");
[myObject performSelector:setter withObject:newValue];

動態獲取屬性:

SEL getter = NSSelectorFromString(@"property");
id myProperty = [myObject performSelector:getter];

對於更復雜的方法,您可以使用NSInvocationNSMethodSignature

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];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM