Re: [問題] 有關object-c中的@property
※ 引述《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
→
12/16 02:28, , 1F
12/16 02:28, 1F
→
12/16 02:29, , 2F
12/16 02:29, 2F
→
12/16 02:32, , 3F
12/16 02:32, 3F
→
12/16 03:30, , 4F
12/16 03:30, 4F
推
12/16 04:44, , 5F
12/16 04:44, 5F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
MacDev 近期熱門文章
PTT數位生活區 即時熱門文章