Re: [問題] 關於使用autorelease或直接使用release …

看板MacDev作者 (←這人是超級笨蛋)時間16年前 (2009/07/18 12:20), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/4 (看更多)
※ 引述《atst2 (atst2)》之銘言: : ※ 引述《uranusjr (←這人是超級笨蛋)》之銘言: : : 有時候是「不得不用」 : : 例如你今天可能有個 getter method 需要回傳一個字串 string : : 這個 string 是由一個已存在的 string1 組合成...略 : Getter的情況uranusjr網友已經說明的很清楚了,補充一下Setter的做法: : 一般在使用release,而非autorelease時,在setter method內應該要做一些檢查如下: : //下列函式會將輸入的newString存入_myString變數中 : - (void)setMyString:(NSString*)newString : { : if(newString && _myString != newString) {//檢查兩者指標不同 : [_myString release]; : _myString = [newString retain]; : } : } : 但在使用autorelease時,則語法上可以更單純一點: : - (void)setMyString:(NSString*)newString : { : [_myString autorelease]; : _myString = [newString retain]; : } 這邊還有一種寫法 - (void)setMyString:(NSString *)newString { [newString retain]; [_myString release]; _myString = newString; } 先 retain 新的再 release 舊的就不會有問題 至於要用哪種就可以視狀況而定 如果 setter 被呼叫時常常其實新舊值根本一樣, 那用檢查法或 autorelease 比較好 反之如果 setter 常常要處理新值, 那 retain - release 法就比較好 檢查法和 autorelease 法的差別當然就在前者多一個 if 而後者的 _myString 廢料會佔用記憶體比較久 : 差別之處,之前推文回文中都有說明了,便不再敍述。 : 至於何時該使用autorelease,何時使用release,個人意見是看記憶體的使用量. : 一般小型軟體開發,包括學校作業,自用的小工具之類的,使用autorelease : 比起使用release而言更易於管理。 小型軟體開發當然用 garbage colletor 比較好(喂) 當然寫 iPhone 軟體開發的請忽視這一行XD : 不過當記憶體受限時,或是需要較多資源的軟體,對release,dealloc的時機就要 : 更精確的掌控. : 最終一切還是由需求來決定。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.72.123
文章代碼(AID): #1AOKsANt (MacDev)
文章代碼(AID): #1AOKsANt (MacDev)