0

我有这门课:

@interface PersonModel : NSObject

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

@end

在另一个类中,我使用该字符串和数组。字符串正常,但数组为空。我像往常一样启动它,如下所示:

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

2 回答 2

7

如果其他东西对同一属性有强引用,则弱属性引用很有用。在您的情况下,情况似乎并非如此。把你Array变成一个strong财产。

(为了便于阅读,不要以大写字母开头命名变量;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:这是有效的,因为您的弱参考至少需要一个强参考(请参阅 Phillip Mills 的回复)。很高兴知道为什么将 NSMutableArray 的新实例设置为临时变量有效。

于 2012-12-21T12:43:45.883 回答