我以爲我得到可可內存管理的竅門,但顯然我有很多東西要學。內存管理問題
看看這個類我寫道:
Word.h
#import <UIKit/UIKit.h>
@interface Word : NSObject {
NSString *word;
NSMutableArray *wordArray;
}
@property (nonatomic ,retain) NSString *word;
@property (nonatomic ,retain) NSMutableArray *wordArray;
@end
Word.m
#import "Word.h"
@implementation Word
@synthesize word, wordArray;
- (void)setWord:(NSString *)aWord {
NSMutableArray *newValue = [[NSMutableArray alloc] init];
self.wordArray = newValue;
[newValue release];
for (int i = 0 ;i < [aWord length] ;i++) {
NSString *character = [[NSString alloc] init];
character = [NSString stringWithFormat:@"%C",[aWord characterAtIndex:i]];
[wordArray addObject:character];
//[character release];
}
}
- (void)dealloc {
[word release];
[wordArray release];
[super dealloc];
}
@end
正如你所看到的,當我設置字符串時,我正在填充一個數組。我通過拉出字符串的字符並將它們放入一個新的分配字符串中來對此進行for循環。 然後我把該字符串放在數組中,然後我必須釋放字符串。 它在這裏我做錯了,因爲我釋放了我放入數組的值。當後來我試圖使用數組時,它就消失了。
我應該怎麼辦?讓「角色」成爲財產並在dealloc中釋放它是錯誤的,因爲它只是暫時的。
所以autorelease池被耗盡,當類的實例死了,我可以確保autorelease不會太快釋放我的對象? – Oscar 2010-02-28 10:11:34
自動釋放池在運行循環中釋放,即在正常代碼之外。它不會在你的一個方法中觸發。 編輯:如果你使用後臺線程,否則這可能是一個問題,你需要設置一個線程本地autorelease池正是因爲這個原因。但這不是問題。 – 2010-02-28 10:20:59
好吧,謝謝你的幫助:) – Oscar 2010-02-28 10:23:23