我做了一些测试:
在最近的 Objective-c 约定下,您不需要综合属性。
如果你这样做
@property (strong, nonatomic) Business* theBiz;
iOs 会自动创建一个名为 _theBiz 的私有 ivar 变量;
如果您只实现一个 getter 或一个 setter,它似乎工作得很好:
-(void)setTheBiz:(Business *)theBiz
{
_theBiz = theBiz;
}
但是,如果您声明 BOTH,即使其中之一只是空函数,您也会收到编译错误。
-(void)setTheBiz:(Business *)theBiz
{
_theBiz = theBiz;
}
-(Business *) theBiz
{
}
当你同时实现 getter 和 setter 时,你会得到一个编译错误,说没有 _theBiz 这样的东西。
通过添加以下内容可以轻松解决此问题:
@synthesize theBiz = _theBiz;
但这破坏了Objective-c这个令人敬畏的新特性的全部意义。
我想知道这是设计使然还是我只是遗漏了一些东西。苹果的东西是什么?
我最好的猜测是这是一个错误。
纪尧姆的回答没有解决这个事实。
他说过
至少已经合成了一种方法
如果只设置了 getter 或 setter 之一,似乎就会创建 _theBiz 。当两者都设置时,它不再被创建,这一定是一个错误。事实上,根本不需要设置任何变量,仍然会创建 ivar。
解决这个问题的唯一方法是明确地做
@synthesize theBiz = _theBiz;