我在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 ...... 为什么呢?
答案 0 :(得分:1)
您可能没有为要发布的对象分配内存
答案 1 :(得分:1)
如果你没有弧,那么你必须使用(非原子,保留)(或如果不保留则分配)。
此外,任何未明确分配的对象都应返回自动释放。所以不要释放它们。
如果你想创建一个你可以用另一个拥有的可变数组
[NSMutableArray alloc] initWithArray:aArray];
对于NSString,使用(非原子,复制),同样,再次,当你为@ssthing指定一个nsstring时,你正在分配一个覆盖前一个[NSString alloc] init的自动释放的那个。
所以,如果你想拥有你应该做的字符串:
[NSString alloc] initWithString:aString];