我有一个带有id参数的方法。我的班里也有一个id作为财产。我的问题是在init方法中是否有一种方法可以确定是否可以保留传递的参数,以便我可以执行以下操作:
someProperty = [idParameter retain];
由于
答案 0 :(得分:3)
所有Objective-C对象(即从NSObject
类继承或实现NSObject
协议的任何内容)都实现retain
。它由NSObject
类实现,它是协议的必需方法,因此您不能拥有无法调用retain
的Objective-C对象。
在这些情况下,您唯一无法调用它的方法是,id
类型的变量未指向Objective-C对象。这是一个错误,不要这样做。
答案 1 :(得分:2)
从NSObject继承的每个对象都有一个respondsToSelector:
方法。 (Documentation)
因此,你可以写:
if ([idParameter respondsToSelector:@selector(retain)])
someProperty = [idParameter retain];