不初始化 class 的 属性 这是 NSMutableArray 行为不端?
Not initializing a property of a class which is an NSMutableArray misbehaves?
我为 class 定义了一个 NSMutableArray 属性 如下:
@interface Simul : NSObject
@property NSMutableArray * varibs;
@end
@implementation Simul
@synthesize varibs;
-(id) init{
self=[super init];
if (self) {
NSLog(@"I am initiated");
}
return self;
}
现在,在 main 函数中执行以下操作并打印:
2015-01-18 23:27:06.534 calculate_x[4881:189850] 0.0000
程序以退出代码结束:0
但是,我们在 NSMutableArray 变量 varibs 中没有索引为 2 的对象。
这里发生了什么?
为什么索引 2 指定的不存在的对象没有运行时错误?
谢谢。
int main(int argc, const char * argv[]) {`
@autoreleasepool {
Simul * mySimul = [[Simul alloc] init];
NSLog(@"%.4f", [[mySimul.varibs objectAtIndex:2] floatValue]);
}
return 0;
}
您从未初始化 varibs
,所以它是 nil
。在 Objective-c 发送任何消息到 nil
returns nil
- 所以
[[mySimul.varibs objectAtIndex:2] floatValue])
真的是在说
[[nil objectAtIndex:2] floatvalue]
或
[nil floatvalue]
which returns nil
,这是 0 和 0 作为浮点数是 0.0 给定你的格式
你只需要在 -(id)init
中初始化它
varibs = [[NSMutableArray alloc] init];
我为 class 定义了一个 NSMutableArray 属性 如下:
@interface Simul : NSObject
@property NSMutableArray * varibs;
@end
@implementation Simul
@synthesize varibs;
-(id) init{
self=[super init];
if (self) {
NSLog(@"I am initiated");
}
return self;
}
现在,在 main 函数中执行以下操作并打印:
2015-01-18 23:27:06.534 calculate_x[4881:189850] 0.0000
程序以退出代码结束:0
但是,我们在 NSMutableArray 变量 varibs 中没有索引为 2 的对象。
这里发生了什么? 为什么索引 2 指定的不存在的对象没有运行时错误?
谢谢。
int main(int argc, const char * argv[]) {`
@autoreleasepool {
Simul * mySimul = [[Simul alloc] init];
NSLog(@"%.4f", [[mySimul.varibs objectAtIndex:2] floatValue]);
}
return 0;
}
您从未初始化 varibs
,所以它是 nil
。在 Objective-c 发送任何消息到 nil
returns nil
- 所以
[[mySimul.varibs objectAtIndex:2] floatValue])
真的是在说
[[nil objectAtIndex:2] floatvalue]
或
[nil floatvalue]
which returns nil
,这是 0 和 0 作为浮点数是 0.0 给定你的格式
你只需要在 -(id)init
varibs = [[NSMutableArray alloc] init];