【发布时间】:2011-11-11 00:10:16
【问题描述】:
如何在对象上运行任意选择器,其返回是双精度值?例如,我有 obj A,它有方法 -(double)blah;
我该怎么办double res = [obj performSelector:@selector(blah)];? performSelector 返回一个id 类型的对象,所以我应该从 id 转换为 NSInteger 到 double - 这会失去精度吗?
另外,我不想使用 obj 的 methodSignatureForSelector(意思是,没有 NSMethodSignature 也没有 NSInvocation),因为它在运行时会消耗大量 CPU。
【问题讨论】:
-
为什么是
NSInteger?为什么不NSNumber? -
Xcode 编译器阻止转换为 NSInteger 以外的任何内容。此外,NSNumber 是一个对象,但该方法返回一个双精度,而不是一个对象。
-
但是你可以用任何原语初始化 NSNumber。包括双人间。
-
好吧,我只是不想正确思考,我现在看到了你的问题。
标签: objective-c cocoa performselector