0

我有一个带有 NSOperation 的 NSOperationQueue,在我的 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中,现在我在这一行收到一个错误的exc访问:

[previousTime release];

在dealloc ...为什么?

4

2 回答 2

1

您可能没有为要释放的对象分配内存

于 2012-06-02T20:07:14.207 回答
1

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

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

如果你想创建一个你拥有的可变数组,你应该这样做

[NSMutableArray alloc] initWithArray:aArray];

对于 NSString,使用 (nonatomic, copy),同样,当您使用 @"something" 分配 nsstring 时,您正在分配一个自动释放的,覆盖先前的 [NSString alloc] init]。

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

[NSString alloc] initWithString:aString]; 
于 2012-06-02T20:18:02.007 回答