iOSの自動プロパティ合成はプロパティ「XXX」を合成しません
Ios Auto Property Synthesis Will Not Synthesize Propertyxxx
Auto property synthesis will not synthesize property 'XXX' it will be implemented by its superclass, use @dynamic to acknowledge intention
親クラスにはそのようなプロパティがあり、サブクラスでステートメントを作成しました 、コンパイラは警告を出します
プロパティを宣言することで、読み取り専用か読み取り/書き込みか、アトミック操作特性かどうかなどのメンバー変数として簡単に定義できます。つまり、パッケージが単語のメンバー変数のセットであるかどうかです。 1つのシェルの場合@property
キーワードdoが事前定義されていますこのレイヤーはシェルのようなシェルであり、@sythesize
キーによって実際のシェルと実際の変数メンバー(メンバー変数の場合)のシェルが生成されます定義されていない場合、キーワード対応するメンバー変数が自動的に生成される場合があります)。もちろん、このレイヤーは、自動的に生成されたgetsetのシェルメソッドで構成されます。
最初に、コードを記述しました@property
対応するものを書きます@sythesize
、Appleは、私たちが書かない場合、将来としてLLVMコンパイラを使用します@sythesize
コンパイラが自動的に生成します@sythesize property = _property
。この機能はと呼ばれます 自動プロパティ合成 。
親クラスのプロパティをオーバーライドして変更を加える場合は、 自動プロパティ合成 コンパイラが生成しないことを私は知りません@sythesize property = _property
しかし、すでに@propertyです。現時点では、親がまだシェルを使用している場合は、 場合によっては、クラッシュするとランタイムが生成されます 、といった: プロパティは親クラスでは読み取り専用プロパティですが、サブクラスでは読み取り/書き込み特性が宣言されています 親クラスは読み取り専用メソッドを設定して生成されないため、メソッド呼び出しが設定されている場合はサブクラスでクラッシュします
クラッシュの理由を添付してください:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Class setXXX:]: unrecognized selector sent to instance
したがって、これが発生した場合、解決策は、サブクラス.mを明示的に宣言することです。@synthesize XXX = _XXX次のようにできます。
#import 'LPMySelfShopListModel.h' @implementation LPMySelfShopListModel @synthesize ctitle = _ctitle // applied to the data types of all the features / * Or * / // @ dynamic ctitle // to change the characteristics of the property read and write, NA @end