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