iphone - NSOperation 中的 dealloc

标签 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 中,现在我在这一行收到了错误的 exc 访问:

[previousTime release];

在释放... 为什么?

最佳答案

如果你没有 arc,那么你必须使用 (nonatomic, retain)(如果不保留它,则分配)。

另外,任何你没有显式分配的对象,都应该被自动释放。所以不要释放它们。

如果你想创建一个你拥有的可变数组和另一个你应该做的

[NSMutableArray alloc] initWithArray:aArray];

对于 NSString,请使用 (nonatomic, copy),同样,当您使用 @"something"分配一个 nsstring 时,您分配的是一个自动释放的字符串,它会覆盖之前的 [NSString alloc] init。

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

[NSString alloc] initWithString:aString]; 

关于iphone - NSOperation 中的 dealloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10865505/

相关文章:

iphone - 无法让表格 View 部分/行填充正确的计数和数据。来自 plist 文件

iphone - Provisioning Profiles、Certificates、App IDs和Keys之间的关系

ios - 如何将两个按钮与 UIView 的中心等距对齐

ios - 根据某些条件 swift 执行同时操作

ios - 为什么我应该在 main 中为串行队列创建上下文并在 start 中为并发队列创建上下文?

objective-c - 使用完成 block 创建自定义方法

iphone - 我的单例走在正确的轨道上吗?

iphone - 合成属性是否已经 alloc/init -ed?

iOS,用于调整自定义 subview 中的内容属性的模式

javascript - 安卓/IOS 浏览器。防止默认键盘显示在字段焦点上 (Javascript)