所以我正在尝试为 NSOperation 的子类编写一个初始化程序。这是我第一次使用 NSOperation。我的 NSOperation 子类如下所示:
.h
@property (nonatomic, copy) NSString *fileName;
.m
@synthesize fileName = _fileName;
- (id)initWitFileName:(NSString *)fileName {
if (self = [super init]) {
_fileName = fileName;
}
return self;
}
- (void)dealloc {
[_fileName release];
[super dealloc];
}
- (void)main {
// do long task
}
所以我想当我创建自己的初始化程序时,我应该自己设置 ivar,因为对象的状态在 init 方法中是不确定的。所以我不在初始化程序中使用访问器。当我的主要方法运行时,我得到一个内存错误访问和崩溃。但是,在我的 init 方法中,如果我这样做:
- (id)initWitFileName:(NSString *)fileName {
if (self = [super init]) {
_fileName = [fileName retain];
}
return self;
}
我没有崩溃。什么是正确的?我认为在第二种情况下我不会释放内存,因为访问器是(复制)。或者是因为我不使用访问器,所以我的 fileName 对象基本上只是因为 initWithFileName 方法中没有 +1 而被释放?谢谢!