2012-06-02 65 views
0

我有一個的NSOperation NSOperationQueue,在我的NSOperation .hi具有這種性質:的dealloc中的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 

,這在的NSOperation的的dealloc在.m文件:

- (void)dealloc { 
[__fetchedResultsController release]; 
[__managedObjectContext release]; 
[myObject release]; 
[myArray release]; 
[super dealloc]; 
} 

在另一類我增加操作的隊列中以這樣的方式

MyOperationClass *myOperation = [[MyOperationClass alloc] init]; 
[myOperationQueue addOperation:myOperation]; 
[myOperation release]; 

,但給我就行了bad_exc_access [myArray發佈];我錯了什麼?

編輯:我注意到在代碼我這樣做:

wikiEpisodeArray = [NSMutableArray的arrayWithArray:otherArray];

也許是這樣嗎?我沒有用[NSMutableArray alloc]初始化它?

編輯2: 我還有一個類似的問題,我也有這個變量:

@property (nonatimc, retain) NSString *previousTime; 

,我以這種方式初始化它:

previousTime = [[NSString alloc] init]; 

,並在代碼中,我從來沒有釋放它,只在dealloc中,現在我收到這條線上的壞的訪問權限:

[previousTime release]; 

in dealloc ... 爲什麼?你可能沒有分配的內存對象,你是釋放

+0

的聲音,我喜歡的東西* *其他發佈你的「'MyOperationClass'」'myArray'對象。如果它是我的代碼,我會運行Xcode的工具並使用ObjectAlloc模板來查看誰正在保留和釋放對象的元素。 –

+0

哦......嘿。我也在你的接口聲明中看到ARC關鍵字「'strong」。我個人還沒有很多ARC的經驗,但我認爲ARC的巨大「勝利」是你不必管理dealloc或release。 –

+0

我沒有ARC在我的項目中,所以我必須改變它在非原子保留?...實際上我想做另一個關於這個堆棧溢出的問題... – Piero

回答

1

如果沒有弧

+0

好的,謝謝我再次編輯我的答案......你能看一看嗎? – Piero

+0

看到編輯... –

+0

非常感謝你死亡,你是非常有幫助的,所以我改變nonatomic,複製和我不改變[previousTime發佈]正確的? – Piero

1

,那麼你必須使用(非原子,保留)(或指定,如果不保留它)。

此外,您沒有明確分配的任何對象應該返回自動釋放。所以不要釋放它們。

如果你想創建你自己與另一個的可變數組,你應該爲的NSString,使用(非原子,副本)做

[NSMutableArray alloc] initWithArray:aArray]; 

,也再次,當你分配的NSString與@ 「你正在分配一個自動發佈的覆蓋之前的[NSString alloc] init]的東西。

所以,如果你想自己的字符串,你應該做的:

[NSString alloc] initWithString:aString]; 
+0

是的,皮耶羅的行「'[NSMutableArray arrayWithArray:otherArray];'」意味着他的「'myArray'」對象是autoreleased ...所以這就是他看到'EXEC_BAD_ACCESS'崩潰的原因 –

+0

好的謝謝,而不是強大的非原子?我可以使用它?或者更好的非原子保留?我沒有ARC ... – Piero

+0

強壯和保留相同,因爲他們都創建變量的強引用 –