2012-08-08 25 views
0

我有一个ID参数的方法。我的班级里还有一个身份证。我的问题是在init方法是有办法,我可以判断传递的参数可以保留,所以我可以做这样的事情:iOS检查对象是否可以保留

someProperty = [idParameter retain]; 

感谢

+1

如果是'id',我想不出你*不能保留它的原因。 – 2012-08-08 12:09:20

回答

2

从NSObject的继承每个对象都有一个respondsToSelector:方法。 (Documentation

因此,你可以写:

if ([idParameter respondsToSelector:@selector(retain)]) 
    someProperty = [idParameter retain]; 
+1

这没有必要。 'NSObject'实现'retain',它是'NSObject'协议的必需方法。该条件将始终评估为“是”。 – Jim 2012-08-08 12:19:54

+2

或者把@ Jim的评论换成另一种方式:你怎么知道'idParameter'对'-respondsToSelector:'做出了响应?如果你只是假设它,那么你可能只是假设对象响应'-retain'它们都在'NSObject'协议中声明。 – JeremyP 2012-08-08 12:24:14

3

所有的Objective-C对象(即任何东西从NSObject类继承或实现NSObject协议)实施retain。它由NSObject类实现,并且它是该协议的必需方法,所以不能有一个不能调用retain的Objective-C对象。

在这种情况下,你不能调用它的唯一时间是如果id类型的变量没有指向Objective-C对象。这将是一个错误,不要这样做。

相关问题