です。コードベースでいくつかのClangエラーを解決する任務がありました。私はiPhoneの開発とObjective Cについては非常に新しいですが、問題のほとんどが些細なことを発見しました。この1つは、私が何か困惑していると確信しているときに私を突き飛ばしています。Objective-C: 'self'が設定されていないのにインスタンス変数が使用されていますが、それは
ZAttributedStringクラスから:
- (id)initWithAttributedString:(ZAttributedString *)attr {
NSParameterAssert(attr != nil);
if ((self = [super init])) {
_buffer = [attr->_buffer mutableCopy];
_attributes = [[NSMutableArray alloc] initWithArray:attr->_attributes copyItems:YES];
}
return self;
}
打ち鳴らす警告は「『自己』が結果に設定されていない状態で使用インスタンス変数である 『[superまたは自己]のinit ...]』、とATTRの_buffer属性の逆参照がハイライトされて
それが助け場合
は、警告も、このメソッドから呼び出すときに問題が発見されていることを言及しているようだ:。- (id)copyWithZone(NSZone *)zone {
return [(ZAttributedString *)[ZAttributedString allocWithZone:zone] initWithAttributedString:self];
}
缶誰も私に説明してください正確にここに欠陥が何ですか?
TIA!
実際、このコードは 'ZAttributedString'クラスのものですので、同じクラスの別のインスタンスからivarsにアクセスするには' - > 'を使うのがまったく正しいです。これは基本的に "コピーコンストラクタ"を作成しているときにそのようなコードに適しています。 – rmaddy
この場合でも実際は正しくありません。 *それが '-copy'メソッドそのものだった場合、*多分*(ObjCの歴史の中では本当に面白い--NscopyObject()は痛みの終わりをもたらしませんでした)。しかしDIではそうではありません。クラスは、何かを行うゲッターにロジックを持ち、インバインドされたインスタンスは、おそらく未知のビヘイビアを持つサブクラスである可能性があります。 – bbum
@bbum: "着信attrはZAttributedStringインスタンスまたはサブクラスのインスタンスである可能性があります。" self "はサブクラスのインスタンスになる可能性があります。したがって、その引数によってインスタンス変数にアクセスすることはできません。 – user102008