對 objective-c 記憶體管理的一點兒認識

來源:互聯網
上載者:User

NSString *str1 = [NSString stringWithString:@"str1"];

NSString *str2 = @"str2";
NSString *str3 = [NSString stringWithFormat:@"%@", @"str3"];
NSString *str4 = [[NSString alloc] initWithString:@"str4"];
這四者之間到底有何區別?
str2 有什麼玄機我不知道,但是可以肯定的就是:
str1, str3 都是由 NSString 類的靜態方法弄出來的,這樣返回的 NSString 對象是會 autorelease 的,
具體來說就是你在使用這樣的 NSString 對象的時候,不用再去手動的回收了
而 str4 則不一樣,str4 是 NSString alloc 出了對象之後調用對象方法所產生的
這樣而來的 NSString 對象不是 autorelease的,使用完之後需要手動釋放,否則將造成泄露!
同樣的類還有cocos2d 裡面的:
CCSprite
如:
CCSprite *sprite1 = [[CCSprite alloc] initWithFile:@"1.png"];
CCSprite *sprite2 = [CCSprite spriteWithFile:@"2.png"];
和 NSString 是如出一輒啊,可以肯定,objective-c 基礎架構裡面肯定大量採用了這種策略!


摘自 yang3wei的專欄

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.