簡體   English   中英

目標C:創建和使用動態布爾數組的最佳方法是什么?

[英]Objective C: What is the best way to create and use a dynamic boolean array?

超過一個星期以來,我一直在努力嘗試從動態布爾數組創建,訪問和更新值的最佳方法。

@interface myDelegate : NSObject
{
   NSMutableArray *aShowNote;
}
@property (nonatomic, copy) NSMutableArray *aShowNote;

這是初始化數組的方式:

NSMutableArray *aShow = [[NSMutableArray alloc] init]; 
for (i=0; i < c; i++) 
    [aShow addObject:[NSNumber numberWithBool:false]];
self.aShowNote = aShow;

這似乎工作正常,但我困惑為什么每個元素都用相同的地址初始化。

但是到目前為止,我在研究中發現的是,如果要更改其值,似乎需要替換該對象:

myDelegate *appDelegate = (myDelegate *)[[UIApplication sharedApplication] delegate];
NSInteger recordIndex = 1;

NSNumber *myBoolNo = [appDelegate.aShowNote objectAtIndex:recordIndex];
BOOL showNote = ![myBoolNo boolValue];

[appDelegate.aShowNote replaceObjectAtIndex:recordIndex withObject:[NSNumber numberWithBool:showNote]];

但是這種方法似乎過於復雜(而且也崩潰了)。

由於未捕獲的異常“ NSInvalidArgumentException”而終止應用程序,原因:“-[__ NSArrayI replaceObjectAtIndex:withObject:]:無法識別的選擇器已發送到實例0x5b51d00

我們將非常感激收到任何改進此代碼(以及使其正常工作)的指針。

謝謝

伊法

問題是, copy的屬性副本分配的對象。 復制會創建不可變的對象。

將屬性更改為: @property (nonatomic, retain) NSMutableArray *aShowNote;


而且我認為沒有太多改進,據我所知,如果要使用帶布爾值的NSArray,這是要走的路。

為什么不為這種簡單情況使用普通C?

BOOL *aShow = malloc(sizeof(BOOL)*c);
for (i=0 ; i<c ; i++)
    aShow[i] = false;

您只需要記住在完成后free(aShow)

不能更改NSNumber的值。 它不是可變的類。
然后,當您要求兩個相同的值時,將返回相同的對象。

在數組初始化中,為什么不直接初始化數組以避免復制問題:

aShowNote  = [[NSMutableArray alloc] init]; 
for (i=0; i < c; i++) {
    [aShowNote addObject:[NSNumber numberWithBool:false]];
}

我很困惑為什么每個元素都用相同的地址初始化。

為什么? NSNumber是不可變的。 運行時僅需要一個NSNumber對象即可代表FALSE。

暫無
暫無

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

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