2012-10-02 40 views
-1

toNewbie問題:有人可以幫助我理解initWith ....方法的接收方是否擁有所返回對象的所有權並應對其進行管理。 例如:initWith ...方法的接收方是否擁有所有權 - 內存管理

NSString *msg; //could be used to hold some data, then 
[msg initWithFormat: @"some text"]; //do I need to do a retain or is the method returning an auto-released string object 

只是試圖讓我的頭纏着不使用的alloc明確

+0

除非您的目標是iOS 3或OS X 10.5,否則請考慮將ARC用於您的項目。然後你將不必擔心內存管理。 – colincameron

+2

此代碼不做任何事或崩潰; 'msg'不是一個有效的對象,所以你不能發送消息給它。如果你正在創建一個實例,那麼你發送'alloc'到類和'init ...'來得到這個結果。這是可可慣例。如果您看過其他內容,請發佈_actual_代碼。否則,請閱讀[內存管理指南](http://developer.apple.com/library/mac/documentation/General/Conceptual/DevPedia-CocoaCore/MemoryManagement.html)並查看[內存管理問題](http:///stackoverflow.com/search?q=%5Bobjc%5D+memory+management+alloc&submit=search)。 –

回答

1

名稱中帶有init方法通常被稱爲結合alloc,如方法:

MyObject *obj = [[MyObject alloc] init]; 

alloc返回一個+1保留計數的對象,所以你不需要保留它。

+0

感謝您的澄清。我知道的分配/初始組合,但如果我打電話給initWith ...方便initilizer,它是增加保留計數還是我必須手動調用retain [[msg initWithFormat:@「some text」] retain];請指教。 – badboy11

+2

@ badboy11:沒有像'initWith ...'方便初始值設定項那樣的東西。你必須先向班級發送消息以獲得一個實例,如'[Weeble weebleWithWobble:w]'。 –

+0

我想我正在慢慢開始明白。我查看了Stephen Kochan編寫的Objective-C 2.0中的程序。如果我調用[msg initWithString:@「some text」];在已經聲明的NSString指針上,然後它是自動釋放的,除非我使用alloc或複製/保留字符串顯式調用類。 – badboy11

相關問題