4

模糊的概述是我正在一个NSArrayCategory 中编写一个方法,该方法将采用 aClass并将 Array 过滤到属于该类成员的元素。就像是:

@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修饰符吗?如果是这样,为什么?如果不是,为什么不呢?

谢谢!

4

1 回答 1

6

在没有明确的所有权条件的情况下,可以推断出所有权条件;这通常是__strong但在它的情况下Class__unsafe_unretained。这是有道理的,因为Class对象是不朽的,不需要由您的代码管理内存。

所以 Xcode 只是使隐式显式,你不需要自己做。

于 2013-01-09T20:30:20.387 回答