我的理解方式是Objective C的一個特殊之處,就是你可以將消息發送到NULL,它會忽略它們而不是崩潰。爲什麼NSArray不爲不存在的索引返回NULL?
爲什麼NSArray不只是返回一個NULL對象,如果索引請求超出邊界而不是導致NSRangeException?
我期望Objective C和NSArray的內容如下。
NSArray *array = [NSArray arrayWithObjects:@"Object 1", @"Object 2", @"Object 3", nil];
for (int i = 0; i < 5; i++) {
NSString *string = [array objectAtIndex:i];
if (string) {
NSLog(@"Object: %@",string);
}
}
讓我訪問數組的索引與不包含對象,並簡單地返回NULL。然後我可以檢查對象是否存在。我可以在其他地方做到這一點,例如檢查對象是否已經實例化。
NSArray *array;
if (!array) {
array = [NSArray array];
}
我意識到這是一個基於理論的問題,但我很好奇:)爲零
消息傳遞nil與詢問出界指數完全不同。我不明白你爲什麼要在這裏建立聯繫。 –
因爲它沒有意義。在您的程序分配的內容之外訪問內存是未定義的行爲。未定義的行爲不應該是程序依賴的東西,相反,它應該是程序努力去除的東西。誠然,NSArray不是一個數組,但它在大多數情況下必須遵循數組範例。 –