代码之家  ›  专栏  ›  技术社区  ›  CodeSmile Paul Beusterien

Objective-C Runtime Reflection(objc_msgsend):是否违反了iPhone开发者许可协议?[关闭]

  •  1
  • CodeSmile Paul Beusterien  · 技术社区  · 15 年前

    这样的代码是否(可能)违反了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调用方法的代码。这样构造对象非常方便,但我很担心,因为我不知道这是否正常,也不知道动态执行代码是否违反了许可证,甚至可能调用private(?)API函数。如果它们是私人的,就不会被记录下来,对吗?

    有人能解释一下吗?你有没有使用类似于上述代码的应用程序被批准或拒绝?

    我很肯定这没问题,但我不想听到别人说的!:)

    2 回复  |  直到 15 年前
        1
  •  1
  •   Philippe Leybaert    15 年前

    如果您调用的方法有文档记录,则不会违反协议。使用objc_msgsend()没有任何错误,因为这些“反射”函数是完全文档化的。

        2
  •  1
  •   Stephen Darlington    15 年前

    为了支持不同版本的iOS(或在iPhone和iPad上工作的“通用”应用程序),您需要使用类似的结构,这样就可以了。

    不过,有一点:我不确定您是否需要直接使用 objc_msgSend . 你不能用吗 performSelector:withObject:afterDelay: 或者其他类似的方法 NSObject ?