我有1个NSString * abc = @“Hardik”; 我有NSMutableArray *数组; 现在我写了[array addobject:abc];
然后我打印,NSLog(@“array =%@”,数组);
但我得到了NULL 为什么? 我已经声明了NSMutableArray *数组;在a.h文件中 我设置了@property(nonatomic,retain)NSMutableArray *数组; @synthesize数组;
我已经合成它但得到的值为NULL 我无法理解它?
答案 0 :(得分:4)
您还需要初始化数组:
array = [[NSMutableArray alloc] initWithCapacity:10];
这是非常基本的东西。你读过“Learning Objective C Primer”吗?
答案 1 :(得分:3)
听起来你实际上没有分配array
。通常,您可以在初始化程序中执行此操作。 (不要忘记在release
方法中添加dealloc
。)@synthesize
创建getter和setter,但您仍然必须自己处理分配/解除分配对象。 / p>
答案 2 :(得分:0)
听起来您的NSMutableArray *数组属性可能尚未初始化?
你可以发布你的班级初始化方法吗?
答案 3 :(得分:0)
要在类本身内触发合成访问器,必须使用self
。如果不这样做,则直接绕过访问器方法访问属性的地址。你需要:
NSString *abc = @"Hardik";
[self.array addobject:abc];
NSLog(@"array = %@", self.array);
这一点很重要的原因是合成方法通常也会初始化属性。合成数组方法的内部结构如下:
-(NSArray *) array{
if (array!=nil) {
return array;
}
array=[[NSMutableArray alloc] initWithCapacity:1];
return array;
}
self.propertyName
实际上只是[self propertyName]
的简写,self.propertyName=someValue
只是[self setPropertyName:someValue]
的简写。
在您至少致电self.array
一次之前, 数组属性未初始化 。
然而,只是为了混淆事情,一旦你初次化了self.array
,你就可以直接拨打array
。所以......
[self.array addObject:abc];
NSLog(@"array = %@", array);
...工作,而converse只返回一个空数组。
所以规则是:
propertyName
为您提供地址
属性但不打电话
getter / setter访问器方法。 self.propertyName
打电话给。{
getter / setter访问器方法但是
不直接访问属性。 myClass.propertyName
打电话给。{
getter / setter访问器方法。