[英]dealloc in NSOperation
我有一个NSOperationQueue和NSOperation,在我的NSOperation .hi有这个属性:
@interface MyOperationClass : NSOperation
@property (strong, nonatomic) NSFetchedResultsController *fetchedResultsController;
@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (strong, nonatomic) NSManagedObject *myObject;
@property (nonatomic, retain) NSMutableArray *myArray;
@end
这在.m文件中的NSOperation的dealloc中:
- (void)dealloc {
[__fetchedResultsController release];
[__managedObjectContext release];
[myObject release];
[myArray release];
[super dealloc];
}
在另一个类中,我以这种方式在队列中添加操作:
MyOperationClass *myOperation = [[MyOperationClass alloc] init];
[myOperationQueue addOperation:myOperation];
[myOperation release];
但是在[myArray release]的行上给我一个bad_exc_access; 我错了什么?
编辑:我注意到在代码中我这样做:
wikiEpisodeArray = [NSMutableArray arrayWithArray:otherArray];
也许是这个? 我没有用[NSMutableArray alloc]初始化它?
编辑2:我有另一个类似的问题,我也有这个变量:
@property (nonatimc, retain) NSString *previousTime;
我用这种方式初始化它:
previousTime = [[NSString alloc] init];
并且在代码中我从不发布它,只在dealloc中,现在我在这行上收到了一个糟糕的访问权限:
[previousTime release];
在dealloc ...为什么?
您可能没有为要释放的对象分配内存
如果你没有弧,那么你必须使用(非原子,保留)(或如果不保留则分配)。
此外,任何未明确分配的对象都应返回自动释放。 所以不要释放它们。
如果你想创建一个你可以拥有的另一个可变数组
[NSMutableArray alloc] initWithArray:aArray];
对于NSString,使用(非原子,复制),同样,当你为@ssthing指定一个nsstring时,你正在分配一个覆盖前一个[NSString alloc] init的自动释放的nsstring。
所以,如果你想拥有你应该做的字符串:
[NSString alloc] initWithString:aString];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.