Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 目标C:创建和使用动态布尔数组的最佳方法是什么?_Objective C_Arrays_Xcode_Nsmutablearray_Boolean - Fatal编程技术网

Objective c 目标C:创建和使用动态布尔数组的最佳方法是什么?

Objective c 目标C:创建和使用动态布尔数组的最佳方法是什么?,objective-c,arrays,xcode,nsmutablearray,boolean,Objective C,Arrays,Xcode,Nsmutablearray,Boolean,一个多星期以来,我一直在努力寻找从动态布尔数组创建、访问和更新值的最佳方法 @interface myDelegate : NSObject { NSMutableArray *aShowNote; } @property (nonatomic, copy) NSMutableArray *aShowNote; 以下是我初始化阵列的方式: NSMutableArray *aShow = [[NSMutableArray alloc] init]; for (i=0; i < c;

一个多星期以来,我一直在努力寻找从动态布尔数组创建、访问和更新值的最佳方法

@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;
但这种方法似乎过于复杂(而且也会崩溃)

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[\uu NSArrayI replaceObjectAtIndex:withObject:]:无法识别的选择器发送到实例0x5b51d00

任何改进这段代码的建议(当然还有让它工作起来的建议)都会得到非常感谢

谢谢


Iphaaw

问题在于属性中的
复制
复制指定的对象。复制创建不可变的对象

将属性更改为:
@property(非原子,保留)NSMutableArray*aShowNote



我认为没有什么可以改进的,据我所知,如果你想要一个有布尔人的国家安全局,这是一条路要走

问题在于属性中的
copy
复制指定的对象。复制创建不可变的对象

将属性更改为:
@property(非原子,保留)NSMutableArray*aShowNote


我认为没有什么可以改进的,据我所知,如果你想要一个有布尔人的国家安全局,这是一条路要走

我不明白为什么每个元素都用相同的地址初始化

为什么??数字是不变的。运行时只需要一个NSNumber对象来表示FALSE

我不明白为什么每个元素都用相同的地址初始化


为什么??数字是不变的。运行时只需要一个NSNumber对象来表示FALSE。

无法更改NSNumber的值。它不是可变类。
然后,当您请求两个相同的值时,返回相同的对象

在数组初始化中,为什么不直接初始化数组以避免复制问题:

aShowNote  = [[NSMutableArray alloc] init]; 
for (i=0; i < c; i++) {
    [aShowNote addObject:[NSNumber numberWithBool:false]];
}
aShowNote=[[NSMutableArray alloc]init];
对于(i=0;i
无法更改NSNumber的值。它不是可变类。
然后,当您请求两个相同的值时,返回相同的对象

在数组初始化中,为什么不直接初始化数组以避免复制问题:

aShowNote  = [[NSMutableArray alloc] init]; 
for (i=0; i < c; i++) {
    [aShowNote addObject:[NSNumber numberWithBool:false]];
}
aShowNote=[[NSMutableArray alloc]init];
对于(i=0;i
为什么不在这个简单的情况下使用普通C

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

对于(i=0;i为什么不在这个简单的情况下使用普通C

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

对于(i=0;对于所有具有相同地址的条目来说,令人费解的事情是:由于
NSNumber
是不可变的,因此给定的值只需要一个对象。对于一些常见的值,从一开始就有预分配的对象。每次调用
numberWithBool:false
时,只会返回对现有i的另一个引用(顺便说一句,没什么大不了的,但是
NO
false
更惯用)令人费解的是,所有条目都有相同的地址:因为
NSNumber
是不可变的,所以给定的值只需要一个对象。对于一些常见的值,从一开始就有预先分配的对象。每次调用
numberWithBool:false
时,它只会返回对现有实例的另一个引用。(顺便说一句,没什么大不了的,但是
NO
false
更惯用)