作者B1ack3y3 (B1ack3y3)
看板MacDev
标题Re: [问题] property 与 synthesize
时间Wed Jan 23 16:18:57 2013
虽然写了一段时间了, 但一直以来都是可以动就好..
一直到最近才开始研究"为什麽", 来野人献曝一下顺便给人指正XD
※ 引述《MisterX (" X " 先生)》之铭言:
: 最近刚进入object C
: 遇到了property与synthesize这两个新的东西
: 目前对这两个新东西的认知是“总是一起出现的”
: 也就是说在interface中使用property宣告某个变数 x
: 然後在implmentary中再打上@synthesize x
: 则会自动帮我们产生一对setX与X (setter与getter)
: 现在我的问题是:
: 1.property与synthesize一定是同时使用的吗?
: 有没有个别使用的意义或是机会?
property:让你可以使用dot operator
synthesize: 自动帮你生成getter与setter
在之前的iOS3版本, 你可以只写property不写synthesize, 然後自己在.m当中
撰写getter与setter。但一直以来的惯例就是property与synthesize通常都是成对出现。
至於不写property, 只写synthesize...也可以,但我没用过XD
: 2.会有上面的问题,是因为我在练习写code时候只写了@property int x
: 却忘了在implmentary中打上@synthesize x,却也可以正常执行setX与X
: 来存取变数(我没有自己实做set与get)
Xcode不知道4.x之後, 就会自动在编译时期生成synthesize了。
至於为什麽改成这样, 因为在.m中加上synthesize已经是惯例, 所以apple在某次改版
Xcode时就自动帮我们加上这功能了。
: 问题有点奇怪,希望板上有前辈可以了解我的描述,谢谢
在iOS 3.x的时候, .h与.m的写法通常是这样
BMI.h
@interface BMI : NSObject {
NSNumber *_weightNumber;
NSNumber *_heightNumber;
}
@property (nonatomic, retain) NSNumber *weightNumber;
@property (nonatomic, retain) NSNumber *heightNumber;
@end
------------
BMI.m
@implemantation
@synthesize weightNumber = _weightNumber;
@synthesize heightNumber = _heightNumber;
...
...
...
@end
而synthesize会帮我们生成什麽样的setter与getter呢?
- (void)setWeightNumber:(NSNumber *)weightNumber {
...
...
_weightNumber = weightNumber; //就是这道光!!
}
getter就不写了, 不过关键同样是 return _weightNumber;
------------
这样的写法我一直从3.x写到5.x (但好像在5.x就不需要宣告instance variable, 直接
使用property, xcode就会依照property帮我们补上instance variable。
就知道我根本没有在follow...遮脸)
所以apple帮我们改进Xcode的顺序是这样
要宣告instance variable、property、synthesize
↓(宣告iVar是惯例了, 帮我们省略掉)
只要宣告property, synthesize
↓ (宣告synthesize是惯例了, 再帮我们省略掉)
只要宣告property
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.135.88.225
1F:→ B1ack3y3:凭久远以前的印象是这样, 请大大们鞭小力点 01/23 16:23
2F:→ darktt:自动补synthesize是从Xcode 4.5开始的 01/23 17:10
3F:推 scentsome:应该是 LLVM 4.0 。Xcode 4.4 01/23 20:28