作者Gsus (肉元,吉米,助教)
看板MacDev
標題Re: [問題] 有關object-c中的@property
時間Wed Dec 16 02:17:48 2009
※ 引述《uranusjr (←這人是超級笨蛋)》之銘言:
: ※ 引述《Gsus (肉元,吉米,助教)》之銘言:
: : 我想請問
: : @interface myObject:NSObject {
: : NSString *name;
: : }
: : @property(readonly) NSString *name;
: : ------------------------------------
: : @implementation
: : -(NSString*)name {
: : return ......
: : }
: : @end
: : 究竟@property(readonly)是針對interface中name這個變數
: : 還是implementation中name這個method?
: @property 只是讓你少寫一些字的捷徑
: 請把它直接想成下面這行:
: - (NSString *)name;
: readonly 代表, 呃, read-only, 所以就是一個 getter 沒有 setter
: 如果你的 @property 後面沒有加 readonly (或有加 readwrite)
: 那就是兩行
: - (NSString *)name;
: - (void)setName:(NSString *)aName;
: 所以你在 .m 裡面照樣實作就對了
ㄟ都...我會問這個是因為我發現我可以declare一個property, ex:
@property() NSString *name;
即使@interface中完全沒有 NSString *name這個變數
: : 另外如果我將上述例子改寫為
: : @interface myObject:NSObject {
: : NSString *name;
: : }
: : @property(readonly) NSString *getName;
: : ------------------------------------
: : @implementation
: : @synthesize getName;
: : @end
: : 會發生什麼事情?
: ============ IMPORTANT NOTE STARTS HERE ============
: We use name only in Cocoa, not getName
: ================ END IMPORTANT NOTE ================
: 不過回到你的問題, 事實上是不會有什麼事情發生
: 因為 @synthesize 仍然是一個讓你少打幾個字的工具而已
: 它會合成一組「標準」的 setter-getter
: 當然如果你有給 readonly 參數那 @synthesize 就只會生出 getter 不會生 setter
承上,我declare一個property
@property() NSString *name;
而且@interface中沒有 NSString *name 這個變數
我發現我仍然可以在@implementation中synthesize這個name,
而且真的works without any warning or error
並且我在@implementation中甚至可以
[self setName:@"test"];
NSLog(@"%@", [self name]);
: 說真的, 我很想知道你是不是自學的...
: 如果不是, 那要馬你書沒看清楚就跑上來問, 要馬你看到一本爛書 -.-
: 因為書裡面應該要把這些東西解釋清楚才對
: 還是要重申一下我覺得初學者不應該使用 @property @synthesize 的立場
: 尤其對於沒有用 garbage collector 的人XD
Sorry 我是自學的XD
看了Object-c 2.0 的文件後不是很明白所以才上來發問T_T
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.168.32.93
1F:→ uranusjr:我沒記錯的話如果找不到同名變數會自己幫你建一個 12/16 02:28
2F:→ uranusjr:然後問最後那個只是以防萬一你真的看到爛書要趕快救人XD 12/16 02:29
3F:→ Gsus:喔喔喔!!! 感謝~ 12/16 02:32
4F:→ Gsus:那這種被自動建立的變數(if是個物件),將來會被autorelease嗎 12/16 03:30
5F:推 Blueshiva:自動建立變數的這種行為,要問的應該是要在哪邊關掉吧XD 12/16 04:44