[英]iphone memory management and arrays
我仍在努力圍繞iPhone內存管理工作。 我已經檢查了泄漏情況,但我想確定一下。 這沒有泄漏嗎?
NSMutableArray *array = [[NSMUtableArray alloc] init];
NSMutableString *str = [[NSMutableString alloc]];
[str appendstring:@"hi"];
[array addObject:str];
[str release]; //this is the bit I am most concerned about
...some processing of array occurs...
[array release];
假設您的第二行實際上是這樣的:
NSMutableString *str = [[NSMutableString alloc] init];
然后,是的,沒有泄漏。 當您將字符串添加到數組時,該數組會對該字符串具有所有權權益,因此在隨后的聲明中release
該字符串的所有權就可以了。 它仍然按預期存在於數組中。
釋放數組時,它將負責清理自己的引用,包括指向您放入其中的字符串的引用。
大拇指規則,您可以在便利貼上寫上此貼,然后在您的桌面上貼上
如果您是所有者,則分配,新建,初始化或復制的內容是:)
您必須釋放它! 沒有人會為您清理。
**示例:
NSString *releaseMeLaterPlease = [NSString initWithString....];
如果您以示例中的方式創建其他方式,則假定“ bag”是某個數組,
NSString *dontReleaseMe = [bag objectAtIndex:0];
現在,dontReleaseMe不是由alloc,new,init或copy創建的,因此您不會釋放它們。 有人會做。
如果在alloc和init之后使用autorelease,則OS將負責釋放它。
最重要:現在,開發人員不必擔心這些問題!!! Hoooooray! 從iOS5開始自動引用計數
但是,最好學習一下,因為並非所有設備都具有iOS5 :)
祝好運!
quixoto回答了這個問題,但是只是為了明確起見,這是關於每一行代碼中的內存管理的情況:
NSMutableArray *array = [[NSMUtableArray alloc] init]; //array retain count = 1
NSMutableString *str = [[NSMutableString alloc]]; //str retain count = 1
[str appendstring:@"hi"];
[array addObject:str]; //str retain count = 2
[str release]; //str retain count = 1
...some processing of array occurs...
[array release]; //array retain count = 0 & str retain count = 0 .. objects will be removed from memory.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.