0

私はこのクラスを持っています:

@interface PersonModel : NSObject

@property (nonatomic, weak) NSString *string;
@property (nonatomic, weak) NSMutableArray *array;

@end

別のクラスでは、その文字列と配列を使用します。文字列はうまくいきますが、配列はnullになります。次のように、いつものように開始します。

person.array = [[NSMutableArray alloc] init];
[person.array addObject:[object copy]];
NSLog(@"Array: %@", person.array);
4

2 に答える 2

7

弱いプロパティ参照は、他の何かが同じプロパティへの強い参照を持っている場合に役立ちます。あなたの場合、そうではないようです。あなたArraystrong財産にします。

(読みやすくするために、大文字で始まる変数に名前を付けないでください。arrayは よりもわずかに優れていArrayます。何か意味のあるものがさらに優れています。)

于 2012-12-21T12:37:49.243 に答える
1

このコードは問題ないようです。NSMutableArray を弱いプロパティではなく強いプロパティにすることで、機能させることができました。このコードの変更がなぜ違いを生むのかを解明するために、私はまだテスト中です。

編集: 新しい NSMutableArray インスタンスを最初に変数に設定すると、弱いプロパティ タイプで動作することにも気付きました。

PersonModel *personModel = [[PersonModel alloc] init];
NSMutableArray *tempMutableArray = [[NSMutableArray alloc] init];
[personModel setArray:tempMutableArray];
[personModel.array addObject:[someString copy]];
NSLog(@"Array: %@", personModel.array);

編集 2: 弱参照には少なくとも 1 つの強参照が必要なため、これは機能します (Phillip Mills の応答を参照)。NSMutableArray の新しいインスタンスを一時変数に設定するとうまくいった理由を知っておくとよいでしょう。

于 2012-12-21T12:43:45.883 に答える