1

Apple の ARC を使用しています。2 つのクラスがあります。1 つは NSMutableSet を持ち、もう 1 つはその NSMutableSet 内に配置します。

したがって、次のことを行うと:

    ContainerClass* contClass = [[ContainerClass alloc] init];
    for(int i = 0;i<10;i++)
    {
        SmallClass* myClass = [[SmallClass alloc] init];
        [myClass setinfo:i];

        [contClass.mySet addObject:myclass];
    }

    for(SmallClass* cls in contClass.mySet){
         NSLog(@"%@", cls);
    } 

結果は次のとおりです: (null) (null) (null) (null) など。

SmallClass が ARC によってリリースされているということですか? どうすれば解決できますか(もちろん保持はできません)?myClass インスタンスで copy を呼び出すと、myClass の copy を実装していないため、エラーが発生します (ARC 以前の方法で保持するだけです)。

ContainerClassコード:

@interface ContainerClass : NSObject {
    NSString* _icon;
    NSMutableSet* _mySet;
}

@property (nonatomic, strong) NSString* icon;
@property (nonatomic, strong) NSMutableSet* mySet;

@end

そして実装:

@implementation ContainerClass

-(id) init
{
    _myset = [[NSMutableSet alloc] init];
    return [super init];
}

@synthesize mySet = _mySet;

@end
4

1 に答える 1

1

ContainerClass の init メソッドが間違っていると思います。次のことを試してください。

-(id)init
{
    if (self = [super init])
    {
      _myset = [[NSMutableSet alloc] init];
    }
    return self;
 }

それが役に立てば幸い。

于 2012-01-05T10:55:19.430 に答える