作者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