2010-07-05 59 views
0

你需要發佈一些非常簡單的東西嗎?objective-c內存管理問題

NSString *a = @"Hello"; 

//[a release]; ? 

我來自一個Java/C#世界,感到困惑的事情時,應該釋放/保留...

+0

我認爲這是一個重複的問題。看到這裏:http://stackoverflow.com/questions/2888217/static-nsstrings-in-objective-c/2888231#2888231 – harms 2010-07-05 21:30:48

回答

1

不,你不需要釋放一個常量NSString,儘管如果你這樣做不會引起任何問題。常量字符串是內存管理系統的特例。由於它們的內容在編譯時已知,因此它在應用程序二進制文件中是靜態定義的,所以它在運行時永遠不必分配或釋放。出於這個原因,它的保留和釋放方法是noops。

這僅適用於常量NSStrings(以@開頭的字符串)及其免費橋接表親,常量CFStrings(使用CFSTR()宏定義))。

2

號只需release對象,你init/alloc自己或您的實例變量在你的類dealloc方法中。

+0

合成的IB屬性呢? – Yaso 2010-07-05 21:46:58

+0

取決於它們的對象類型,例如NSString是,NSInteger沒有。但正如我上面所說的,這些將以你的'dealloc'方法進行。 – 2010-07-06 02:19:59

+0

您需要在dealloc中釋放所有IB屬性,並且您的對象已保留的所有屬性都與對象類型無關。你不釋放NSInteger的唯一原因是它不是一個對象,它是一個標量。另一方面,你會釋放一個NSNumber。 – 2010-07-06 03:32:39