1. alloc
2. new
3. copy
4. mutableCopy
我們預期method回傳的物件沒有事先被autorelease。相反的,當不是以上四種字串開頭時,回傳的物件將已被事先autorelease。
如果是在非ARC的環境,我們必須遵守這個規則,記得什麼樣的情況要autorelease,什麼情況不用。但在ARC的環境下,則簡單多了,compiler會自動幫我們補上,完全不用我們操心。
只不過,在ARC的環境,當宣告@property時,有個小小的問題困擾著我們。例如以下範例:
Baby.h
@interface Baby : NSObject
@property (strong, nonatomic) NSString *newName;
@property (strong, nonatomic) NSNumber *allocAge;
@property (strong, nonatomic) NSNumber *copyEye;
@property (strong, nonatomic) NSNumber *mutableCopyHand;
錯誤訊息: error: property's synthesized getter follows Cocoa naming convention for returning 'owned' objects
因此,在ARC的環境,compiler不允許我們宣告的property物件變數名稱以new, alloc, copy或mutableCopy開頭。這要怎麼解呢? 還不簡單,人都可以換名了,更何況是區區的變數呢? 就取個新名字吧,相信它不會影響我們App受歡迎的程度的。
沒有留言:
張貼留言