IB を使用してUITableView
作成したプロトタイプ セルがあります。私はUILabel
このプロトタイプセルに を持っています。メソッドUILabel
を使用して識別できるように、タグ値 5 をこれに設定しました。viewForTag:
このような20の私有財産も定義しました
@property(nonatomic, strong) UILabel *label_1;
@property(nonatomic, strong) UILabel *label_2;
.
.
.
@property(nonatomic, strong) UILabel *label_20;
今、からセルを作成しているcellForRowAtIndexPath:
ときUILabel
に、self.label_1 = (UILabel*)[cell viewForTag:5];//5 is the Tag value i have setup using IB
.
今まですべて順調です。このアプリを実行すると、16 までのプロパティに適切な値があり、残りは null であることがわかります。これは、最初の 16 個のセルのみが描画されたため、残りのプロパティには対応する が割り当てられていないためUILabel
です。ここまでは大丈夫です。テーブルをスクロールすると、残りの 4 つのセルが画面上に表示され、最初の 4 つのセルが画面外に表示されます。NSLog(@"%@",self.label_1.text)
今、各プロパティの値を(.を使用して)印刷すると、対応するラベルが画面上にあるプロパティは正しい値を出力しますが、オフスクリーンのプロパティはランダムな値を出力します(nullではなく、ランダムな値だけで、オフにすることができます他のプロパティも。)
通常のシナリオでは、最初に頭に浮かんだのは、行がオフスクリーンになるとすぐに割り当てが解除され、プロパティがランダムな場所 (ダングリング ポインター) を指していることです。しかし、ここで私の場合、プロパティは、strong
このポインターが存在するまで、対応する UILabel の割り当てを解除しないようにするためです。ここで何が起こっているのか誰か説明してもらえますか?