2013年4月16日 星期二

ARC下的property命名問題

在iOS SDK裡,關於method的命名,有個從很久很久以前流傳到現在的特別法則。當method的開頭字串是以下4種時(大小寫有差)
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受歡迎的程度的。



沒有留言:

張貼留言