1

プロパティを作成しました

 @property (weak,nonatomic) UILabel *vishalSays;

次に、以下のようにプロパティを初期化しようとしています:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.vishalSays = [[UILabel alloc] initWithFrame:CGRectMake(30, 100, 200, 44)];
    [self.vishalSays setText:@"Hello World"];
    [self.view addSubview:self.vishalSays];
}

しかし、上記のコードは iPhone シミュレーターでラベルを表示しません。コードを以下に変更する場合:

- (void)viewDidLoad
{
    [super viewDidLoad];
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(30, 100, 200, 44)];
    self.vishalSays = label;
    [self.vishalSays setText:@"Hello World"];
    [self.view addSubview:self.vishalSays];
}

「Hello World」ラベルが表示されます。2 つの構文に動作の違いがある理由を誰かが説明できますか? ありがとうヴィシャル

4

1 に答える 1

0

プロパティが に設定されているためだと思いますweakstrong(推奨) に変更するかretain、初期化の周りにブロックを追加することができます (これが機能するかどうかは不明であり、コンピューターでテストすることはできません)。

ARC を使用している場合、インスタンスを所有するものがないため、初期化は保持されません。

詳細については、https ://stackoverflow.com/a/11013715/785791 を参照してください。

于 2012-12-25T01:17:01.070 に答える