1

我正在使用 Apple 的 ARC。我有两个类:一个有一个 NSMutableSet,一个我想放在那个 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) 等。

这是否意味着 ARC 正在发布 SmallClass?我该如何解决它(我当然不能保留)?在 myclass 实例上调用 copy 会导致错误,因为我没有为 myClass 实现 copy (以 ARC 之前的方式,我只会保留它)。

容器类代码:

@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 回答