0

誰かがこれが機能する理由を私に説明できますか?

SpecialView *view = [[SpecialView alloc]initWithFrame:CGRectMake(0, 0, 320, 164)];
self.specialView = view;
self.tableView.tableHeaderView = self.specialView;

そして、これはしません:

self.specialView = [[SpecialView alloc]initWithFrame:CGRectMake(0, 0, 320, 164)];
self.tableView.tableHeaderView = self.specialView;

どうもありがとうございます !

編集1:.hのプロパティは次のようになります:

@property (weak, nonatomic) SpecialView *specialView;

私がそれが機能しないことを意味するとき、私は最後にself.specialViewがnilであることを意味します。(はい、私はARCを使用しています)

4

1 に答える 1

4

プロパティはとして定義されweakます。これは、参照が保持されないことを意味します。また、オブジェクトの割り当てが解除されると、プロパティがに設定されることも意味しますnil

コードの最初のビットで、SpecialViewインスタンスをローカル(強力な)変数に割り当てます。これにより、オブジェクトが少しの間保持されます。次に、インスタンスを(weak)プロパティに割り当てます。これは何の助けにもなりません。ただし、次に、weakプロパティをテーブルビューのヘッダーに割り当てます。viewローカル変数がスコープ外になった後もインスタンスを存続させるのは、この追加の参照です。ただし、テーブルに別のヘッダーを割り当てる場合、またはテーブルビューがなくなると、特別なビューが解放されて割り当てが解除され、プロパティがnilにリセットされます。

コードの2番目のビットには、ローカル変数がありません。そのため、オブジェクトはすぐに解放されて割り当てが解除され、プロパティはにリセットされnilます。

strongほとんどの場合、プロパティをの代わりにとして定義する必要がありますweak

于 2012-11-12T19:31:09.763 に答える