Re: [問題] 關於使用autorelease或直接使用release …
※ 引述《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
討論串 (同標題文章)
MacDev 近期熱門文章
PTT數位生活區 即時熱門文章