繁体   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