您可以通过两种方式分配数组:
-
直接使用保留值设置 ivar,如下所示:
_arr = [[NSArray alloc] init];
-
使用这样的自动释放值设置属性:
self.arr = [NSArray array];
您可以在您的类的 init 方法中执行此操作,尽管您没有说明它使用的是什么超类,所以我不确定 init 方法的外观。如果它是一个 NSObject,它将如下所示:
- (id)init
{
if ((self = [super init]))
{
self.arr = [NSArray array];
}
return self;
}
但如果是 UIViewController,则需要使用 initWithNibName:bundle,如下所示:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)bundleOrNil
{
if ((self = [super itWithNibName:nibNameOrNil bundle:bundleOrNil]))
{
self.arr = [NSArray array];
}
return self;
}
然后你需要在你的 dealloc 方法中释放它,像这样:
- (void)dealloc
{
[_arr release];
[super dealloc];
}
但是,您应该记住,NSArrays 一旦创建就无法更改,因此您可能希望使用一些对象对其进行初始化,如下所示:
self.arr = [NSArray arrayWithObjects:object1, object2, nil];
或者如果你想稍后添加对象,你应该将它定义为一个 NSMutableArray,像这样:
@property (nonatomic, retain) NSMutableArray *arr;
并使用以下命令对其进行初始化:
self.arr = [NSMutableArray array];
这将允许您稍后向其中添加对象。
顺便说一句,如果你的 dealloc 方法出错,这可能意味着你的项目正在使用 ARC,这是 iOS 5 中的一项新技术,这意味着你不再需要编写 release 和 retain 语句。
如果您不使用 ARC,我建议您这样做,因为它可以让您不必担心保留/释放的问题 - 现在任何刚开始的 iOS 开发人员都应该在每个项目中真正使用 ARC,但因为它只在 iOS 5 中引入,很多 Objective-C 书籍都没有介绍。