我有这个类:
@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);
如果其他内容对同一属性有很强的参考,则弱属性参考很有用。在您的情况下,情况并非如此。将您的Array
放入strong
属性中。
(为了易于阅读,不要以大写字母开头命名变量; array
比Array
好。有意义的事情会更好。)
此代码看起来还可以。我能够通过使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:这起作用是因为您的弱参考需要至少一个有力的参考(请参阅Phillip Mills的响应)。很高兴知道为什么将NSMutableArray的新实例设置为临时变量。