Objective-C运行时反射(objc_msgSend):它是否违反了iPhone Developer License Agreement?

时间:2010-06-14 09:27:41

标签: iphone objective-c reflection licensing

此类代码(可能)是否违反了iPhone开发人员许可协议?

Class clazz = NSClassFromString(@"WNEntity");
id entity = [clazz entityWithImage:@"Icon.png"];
SEL setPositionSelector = NSSelectorFromString(@"setPosition:");
objc_msgSend(entity, setPositionSelector, CGPointMake(200, 100));

我正在研究从XML动态分配类并通过objc_msgSend调用它们的方法的代码。以这种方式构建我的对象非常方便,但它让我担心,因为我不知道这是否正常,或者通过动态执行代码甚至可能调用私有(?)API函数来违反许可证。如果他们是私人的,他们就不会被记录下来,对吗?

有人可以对此有所了解吗?您是否使用与上述类似的代码批准或拒绝了应用程序?

我很确定这没关系,但我不想听别人说的! :)

2 个答案:

答案 0 :(得分:1)

如果您记录的方法已记录在案,则表示您没有违反协议。使用objc_msgSend()没有任何问题,因为这些“反射”函数已完全记录。

答案 1 :(得分:1)

您需要使用类似的结构才能支持不同版本的iOS(或适用于iPhone和iPad的“通用”应用程序),所以应该没问题。

但有一点:我不确定您是否需要直接使用objc_msgSend。您是否可以使用performSelector:withObject:afterDelay:NSObject的其他类似方法之一?