NSOperation中的dealloc

时间:2012-06-02 20:00:56

标签: iphone ios nsoperation nsoperationqueue dealloc

我在NSOperation中有NSOperationQueue和NSOperation。我有这个属性:

@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 ...... 为什么呢?

2 个答案:

答案 0 :(得分:1)

您可能没有为要发布的对象分配内存

答案 1 :(得分:1)

如果你没有弧,那么你必须使用(非原子,保留)(或如果不保留则分配)。

此外,任何未明确分配的对象都应返回自动释放。所以不要释放它们。

如果你想创建一个你可以用另一个拥有的可变数组

[NSMutableArray alloc] initWithArray:aArray];

对于NSString,使用(非原子,复制),同样,再次,当你为@ssthing指定一个nsstring时,你正在分配一个覆盖前一个[NSString alloc] init的自动释放的那个。

所以,如果你想拥有你应该做的字符串:

[NSString alloc] initWithString:aString];