私はいくつかのテストを行いました:
最近の Objective-c の規約では、プロパティを合成する必要はありません。
もしあなたがそうするなら
@property (strong, nonatomic) Business* theBiz;
iOs は、_theBiz という名前のプライベート ivar 変数を自動的に作成します。
ゲッターまたはセッターのみを実装すると、問題なく動作するようです。
-(void)setTheBiz:(Business *)theBiz
{
_theBiz = theBiz;
}
ただし、両方を宣言すると、どちらかが空の関数であってもコンパイル エラーが発生します。
-(void)setTheBiz:(Business *)theBiz
{
_theBiz = theBiz;
}
-(Business *) theBiz
{
}
getter と setter の両方を実装すると、_theBiz のようなものがないというコンパイル エラーが発生します。
これは、次を追加することで簡単に修正できます。
@synthesize theBiz = _theBiz;
しかしそれでは、Objective-c のこの素晴らしい新機能の要点がすべて台無しになります。
これは仕様によるものなのか、それとも何かが足りないだけなのだろうか。アップルって何?
私の最善の推測は、それはバグです。
ギヨームの答えは、その事実に対処していません。
彼は言った
少なくとも1 つのメソッドが合成されました
getter か setter のどちらか一方だけが設定されていれば _theBiz が作成されていたようです。両方が設定されている場合、それは作成されなくなり、バグである必要があります。実際、何も設定する必要はなく、ivar は引き続き作成されます。
それを修正する唯一の方法は、明示的に行うことです
@synthesize theBiz = _theBiz;