我有這個在我的代碼:內存泄漏
NSString *myString = @"";
....
if (...) {
myString = @" other string";
}
...
myString = @" an other string ";
這是一個泄漏,請?
我有這個在我的代碼:內存泄漏
NSString *myString = @"";
....
if (...) {
myString = @" other string";
}
...
myString = @" an other string ";
這是一個泄漏,請?
對不起,夥計們,但它不是autoreleased。它不泄漏,但它不是自動釋放。這段代碼證明這一點:
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSString *str1 = @"First one"; //
NSString *str2 = [NSString stringWithFormat:@"The %dnd", 2]; // this autoreleasing string
[pool drain];
NSLog(@"%@", str1); // All's ok
NSLog(@"%@", str2); // EXC_BAD_ACCESS
閱讀有關與@"..."
建設創建的字符串在Strings PRogramming Guide:
編譯器使得這樣的對象中每一個模組 基礎上 常數獨特的,他們永遠不會釋放, 雖然你可以保留並釋放他們 當你做任何其他對象。
不,這不是一個泄漏這將是autorelease
你不太對,看看我的答案。 – 5hrp 2011-05-11 12:49:49
是鋒利是正確的......你錯了一點.. – 2011-05-11 12:57:41
這是不泄漏。只有在分配內存並且不釋放內存時纔會泄漏內存。
在你的情況下,你創建的是一個自動釋放的對象。他們將在稍後發佈。
不,它不是自動釋放對象 – 5hrp 2011-05-11 12:59:55
當您通過使用alloc init
或new
,retain
或mutablecopy
方法分配對象並隨後不釋放它們而獲取對象的所有權時會泄漏內存。然後它會導致泄漏。看看Object Ownership
您擁有您創建的任何對象。
你「創造」使用名稱以「黃金」, 「新」,「複製」,或「mutableCopy」(對於 例如,分配,NEWOBJECT,或 mutableCopy)的方法的對象。
您可以使用retain獲取對象的所有權。
請記住,對象可能有多個所有者。取得對象的所有權 是你說 你需要它保持活着的方式。 (這是更詳細地討論 「存取方法。」)
你必須放棄你自己,當你完成 與他們的對象的所有權。
你通過發送釋放消息 或一個自動釋放消息放棄對象的所有權(自動釋放 被更詳細地 「自動釋放」中討論)。在Cocoa術語中,放棄對象 的所有權因此通常被稱爲 「釋放」對象。
您不得放棄您不屬於自己的物體的所有權。
這主要是以前的政策 規則的隱含推論,作出明確規定。
它不是自動釋放,看我的答案 – 5hrp 2011-05-11 12:50:32
+1:是啊......他們都存儲在一個常量池(不自動發佈的池),如果你檢查它們的保留數,它是整數可以容納的最大值。 – 2011-05-11 12:59:27