这是一个愚蠢的问题,但它让我发疯!
我有一个简单的 ARC 类,它实现了 2 个 NSMutableSet 和 1 个 NSMutableArray。这 3 个变量是私有的,因此它们不会使用 @property 公开,但我知道,默认情况下,类的对象 var 定义为 __strong。
问题是,在未来的某个时间,类方法 -(id)drawObject 在内部访问 NSMutableArray 并且一旦方法访问 _outObjects var,它就会崩溃。因此调试在 init 中初始化的 NSMutableArray 的接缝消失了(我可以在 init 中读取它,它显然是空的,但我无法在 drawObject 中读取它,因为它已被释放。)
问题可以解决,将 init 行从
_outObjects = [NSMutableArray arrayWithCapacity:_objects.count];
至
_outObjects = [[NSMutableArray alloc] initWithCapacity:_objects.count];
但我希望使用 ARC 得到相同的结果!苹果说 + init 方法和 - init 方法在使用 ARC 时是一样的!它应该只改变预处理器完成类的方式。
声明 NSMutableArray *_outObjects; 作为 NSMutableArray __strong *_outObjects; 显然没用,因为它已经默认了。
这里是标题
@interface GTGameBag : NSObject {
@protected
NSMutableSet *_objects;
NSMutableSet *_innerObjects;
NSMutableArray *_outObjects;
}
- (id)initWithObjects:(NSSet*)objects;
- (id)drawObject;
这里是实现
- (id)initWithObjects:(NSSet *)objects {
self = [super init];
if (self) {
_objects = [objects mutableCopy];
_outObjects = [NSMutableArray arrayWithCapacity:_objects.count];
_innerObjects = [_objects mutableCopy];
}
return self;
}
- (id)drawObject {
id obj = [_innerObjects anyObject];
[_innerObjects removeObject:obj];
[_outObjects addObject:obj];
return obj;
}
在使用 + 和 - 方法分配空数组时,如何使用 ARC 实现这种不同的行为?
先感谢您。加布里埃尔。