模糊的概述是我在NSArray
类别中编写了一个方法,该方法将采用Class
并将数组过滤到属于该类成员的元素。类似的东西:
@implementation NSArray(filter)
-(NSArray*)objectsOfClass:(Class)aClass {
NSMutableArray *ret = [[NSMutableArray alloc] init];
for (id obj in self)
if ([obj isMemberOfClass:aClass])
[ret addObject:obj];
return [NSArray arrayWithArray:ret];
}
@end
Sooo,顺便提一下,问我的问题。 NSObject.h显示isMemberOfClass:具有以下签名:
-(BOOL)isMemberOfClass:(Class)aClass;
当我在XCode中输入此方法时,自动完成提示方法签名如下:
[self isMemberOfClass:(__unsafe_unretained Class)]
我的问题是:
1)为什么NSObject.h中的方法原型与XCode的自动完成之间存在差异?
2)在我自己的方法中(在这个问题的开头显示),我应该包含__unsafe_unretained
修饰符吗?如果是这样,为什么?如果没有,为什么不呢?
谢谢!
答案 0 :(得分:6)
在没有明确的所有权资格的情况下,推断出一个;这通常是__strong
,但在Class
的情况下,它是__unsafe_unretained
。这是有道理的,因为Class
对象是不朽的,不需要由代码管理内存。
所以Xcode只是隐式显式,你不需要自己做。