我遇到了與iphone中的內存管理相關的奇怪問題。由於iphone中的訪問器方法導致的內存管理問題
我解釋它通過一個例子 考慮以下書面一段代碼
在XMLParser.h@interface XMLParser:NSObject/*<NSXMLParserDelegate>*/ {
NSMutableArray *parsedXML;
}
@property (nonatomic, retain) NSMutableArray *parsedXML;
在XMLParser.m如果我寫我init函數像下面書面形式 #進口「XMLParser.h」
@implementation XMLParser
@synthesize parsedXML;
- (XMLParser *) initXMLParser :(NSString *)repetingTagStr{
self = [super init];
if(self){
self.parsedXML = [[NSMutableArray alloc] initWithCapacity:1];
NSLog(@"%d", [self.parsedXML retainCount]);
[self.parsedXML release];
}
return self;
}
- (void) dealloc {
[parsedXML release];
[super dealloc];
}
@end
NSLog將保留計數設置爲2,當發佈聲明後如果我嘗試使用它,則我噸發生崩潰。如果我使用它分配它 NSMutableArray * temp = [[[[NSMutableArray alloc] initWithCapacity:1] autorelease]; 或 self.parsedXML = [NSMutableArray arrayWithCapacity:1]; 然後它工作正常。
我現在真的非常困惑,因爲autorelease不會導致崩潰並立即釋放導致崩潰。 是否與訪問器方法有關。 請解釋在我的概念中的內存管理:)
謝謝..對不起,我錯誤地把它分配在那裏,實際上它的保留,我在這裏分享的結果是與保留財產。實際上我正在測試一些東西,並且在這裏分配了相同的代碼,現在可以請您解釋爲什麼在這裏發生這種情況與保留屬性 – vikas
它不應該發生。有更多的代碼可以發佈嗎? – jtbandes
實際上,這是唯一的代碼,並且這個函數「initXMLParser」是在創建類XMLParser的實例時調用的。你可以簡單地將上面的init代碼放在任何viewcontroller類的viewdidload中,並檢查它的結果。立即釋放是崩潰和autorelease工作正常與accessor方法.... :( – vikas