不初始化 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];