[英]Retain count = 0 in other function? memory-management problem?
我在頭文件中聲明了一個NSMutableArray:
NSMutableArray *myMuArr;
和
@property (nonatomic, retain) NSMutableArray *myMuArr;
在.m文件中,我有另一個類的委托:
-(void)didGrabData:(NSArray*)theArray {
self.myMuArr = [[[NSMutableArray alloc] initWithArray:myMuArr]retain];
}
如果要訪問cellForRowAtIndexPath中的self.myMuArr,則為空(我檢查了數組的保留計數,它為0)
我究竟做錯了什么?
當然,它是在dealloc中釋放的,在其他任何地方都沒有。
如果有任何幫助,我將非常感謝:0)
如果不是因為您試圖在數組存在之前使用其自身的內容來初始化數組,那么保留數應為3。 嘗試替換以下代碼行:
self.myMuArr = [[[NSMutableArray alloc] initWithArray:myMuArr]retain];
用這一行:
self.myMuArr = [NSMutableArray arrayWithArray:theArray];
我認為您不了解何時保留和釋放。 看看這個SO問答 。 通讀並理解它,並閱讀它鏈接的文章。 它將對您有很大幫助。 在iPhone上理解這一點至關重要。
您的數組將保留3次,但您只需要執行一次:(1)調用alloc / init時,您將擁有一個數組(保留)。 (2)當您調用“保留”時,這是一個額外的保留。 (3)您的設置器self.myMuArr被定義為保留在@property中,因此當您使用setter方法分配指針時,它將再次保留。
您通常會看到代碼使用這兩種技術,兩者都是正確的:
-(void)didGrabData:(NSArray*)theArray {
NSMutableArray *arr = [[NSMutableArray alloc] initWithObjects:obj1, obj2, nil];
self.myMutArr = arr;
[arr release];
}
或使用arrayWithObjects,它為您提供了一個自動釋放的數組,如果您想擁有其內存空間並保留它,則需要保留該數組。 您的安裝員將執行以下操作:
-(void)didGrabData:(NSArray*)theArray {
self.myMutArr = [NSMutableArray arrayWithObjects:obj1, obj2, nil];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.