簡體   English   中英

NSOperation中的dealloc

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM