gpt4 book ai didi

iphone - 在 Objective-C 中分配属性

转载 作者:行者123 更新时间:2023-12-02 01:17:43 25 4
gpt4 key购买 nike

我有以下关于在 Objective-C 中分配属性的问题,

如果我有以下属性:

@property (nonatomic, retain) NSArray *arr;
@synthize arr=_arr;

我应该像这样分配这个数组吗:

arr=[[NSArray alloc]init];

如果我应该,分配它的最佳位置在哪里?

我知道我应该释放它,但保留一个属性会使它的保留计数增加 1,而分配它会使它再增加 1,对吗?

最佳答案

您可以通过两种方式分配数组:

  1. 直接使用保留值设置 ivar,如下所示:

    _arr = [[NSArray alloc] init];
  2. 使用这样的自动释放值设置属性:

    self.arr = [NSArray array];

您可以在您的类的 init 方法中执行此操作,尽管您没有说明它使用的是哪个父类(super class),所以我不确定 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 书籍未涵盖它。

关于iphone - 在 Objective-C 中分配属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9236230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com