【发布时间】:2014-07-10 14:34:18
【问题描述】:
我有一段代码调用一个对象的方法,该对象的 .h 文件我没有包含在我的项目中,也不能包含(我不想进入这个)。
但是,我知道我需要调用它所具有的特定函数,该函数返回 NSTimeInterval。
显然,编译器警告我该方法未定义并且可能会崩溃。问题是编译器将未知函数的返回值默认为 id,我无法将 id 强制转换为非指针值。然而,在运行时,id 的值是我需要 NSTimeInterval 包含的值。
id tempValue = [myObject unknownNumberMethod]; // compiler says: "instance method -unknownNumberMethod not found(return type defaults to 'id'
NSTimeInterval realValue = (NSTimeInterval)tempValue; //this yields a compilation error:/Users/Niv/Projects/Copia/Copia.MAC/RMSDKServicer/RMSDKServicer/Downloader/ActivatorService.m:75:24: Initializing 'NSTimeInterval' (aka 'double') with an expression of incompatible type 'id'
我尝试声明这样的方法,只是为了让编译器理解它返回一个NSTimeInterval而不是id:
@interface MyClass //type of myObject
-(NSTimeInterval)unknownNumberMethod;
@end
然而,这使得unknownNumberMethod 不断地返回0,所以我假设它用空白覆盖了真正的方法。
我还寻找了一些方法来定义一个类的extern 方法,但找不到正确的语法。
什么是“强制”编译器意识到即使它没有找到方法定义,它返回一个NSTimeInterval而不是id的正确方法?
【问题讨论】:
-
您不认为找出为什么编译器抱怨
-unknownNumberMethod会更好吗?你真的认为你能从中获得任何有用的价值吗? -
老实说,在运行时我可以看到 id 的值是正确的。
-
我相信更聪明的人可以对此进行改进,但是您可以从 [NSString stringWithFormat@"%p", returnValue] 获得一个具有十六进制值的 NSString
标签: objective-c nstimeinterval