繁体   English   中英

NSOperation中的dealloc

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM