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
更惯用)