4

漠然とした概要は、そのクラスのメンバーである要素に配列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

すっごく、それが邪魔にならないように、私の質問に移ります。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_unretainedClassオブジェクトは不滅であり、コードでメモリを管理する必要がないため、これは理にかなっています。

したがって、Xcode は暗黙的を明示的にしているだけであり、自分でこれを行う必要はありません。

于 2013-01-09T20:30:20.387 に答える