簡體   English   中英

在Objective-C中分配屬性

[英]Allocating a property in Objective-C

關於在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方法中執行此操作,盡管您沒有說這使用的是超類,所以我不確定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];
}

但是,請記住,一旦創建NSArray,就無法再對其進行更改,因此您可能要使用某些對象來初始化它,如下所示:

self.arr = [NSArray arrayWithObjects:object1, object2, nil];

或者,如果您想在以后添加對象,則應將其定義為NSMutableArray,如下所示:

@property (nonatomic, retain) NSMutableArray *arr;

並使用以下命令初始化它:

self.arr = [NSMutableArray array];

這樣一來,您以后便可以向其中添加對象。

順便說一句,如果您在dealloc方法中遇到錯誤,則可能意味着您的項目正在使用ARC,這是iOS 5中的一項新技術,這意味着您不再需要編寫發布和保留語句。

如果您不使用ARC,我建議您這樣做,因為這樣可以避免您擔心保留/發布的問題-現在剛開始使用的所有iOS開發人員都應該對每個項目都真正使用ARC,但是因為它只是被引入的在iOS 5中,很多Objective-C書籍都沒有介紹它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM