Re: [問題] 有關object-c中的@property

看板MacDev作者 (肉元,吉米,助教)時間15年前 (2009/12/16 02:17), 編輯推噓1(104)
留言5則, 3人參與, 最新討論串3/3 (看更多)
※ 引述《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
然後問最後那個只是以防萬一你真的看到爛書要趕快救人XD
12/16 02:29, 2F

12/16 02:32, , 3F
喔喔喔!!! 感謝~
12/16 02:32, 3F

12/16 03:30, , 4F
那這種被自動建立的變數(if是個物件),將來會被autorelease嗎
12/16 03:30, 4F

12/16 04:44, , 5F
自動建立變數的這種行為,要問的應該是要在哪邊關掉吧XD
12/16 04:44, 5F
文章代碼(AID): #1B9zBEnq (MacDev)
文章代碼(AID): #1B9zBEnq (MacDev)