- Значение переменных по умолчанию на момент объявления - - PullRequest
4 голосов
/ 14 апреля 2010

Мне было интересно, каковы были значения переменных по умолчанию, прежде чем я их инициализировал ...

Например, если я сделаю:

//myClass.h

BOOL myBOOL; // default value ?
NSArray *myArray; // default value ?
NSUInteger myInteger; // default value ?

Еще несколько примеров здесь:

//myClass.m
// myArray is not initialized, only declared in .h file

if ([myArray count] == 0) { // TRUE or FALSE ?

// do whatever

}

В общем, что я получу, когда вернусь:

[myObjectOnlyDeclaredAndNotInitialized myCustomFunction];

Спасибо за ваши ответы.

Gotye.

Ответы [ 3 ]

2 голосов
/ 14 апреля 2010

Ответ заключается в том, что это зависит от области, в которой определена переменная.

Переменные экземпляра объектов Objective C всегда инициализируются равными 0 / nil / false, поскольку выделенная память обнуляется.

Глобальные переменные , вероятно, инициализированы значением 0 / nil / false, поскольку, когда память впервые выделяется процессу, она также обнуляется операционной системой. Однако, разумеется, я никогда не полагаюсь на это и всегда инициализирую их сам.

Локальные переменные неинициализированы и будут содержать случайные данные в зависимости от того, как вырос / сократился стек.

Примечание: для указателей на объекты Objective-C вы можете безопасно отправлять сообщения на ноль. Так, например:

NSArray* foo = nil;
NSLog(@"%@ count = %d", foo, [foo count]);

совершенно законно и будет работать без сбоев с выводом что-то вроде:

2010-04-14 11:54:15.226 foo[17980:a0f] (null) count = 0
0 голосов
/ 14 апреля 2010
//myClass.h

BOOL myBOOL; // default value ?
NSArray *myArray; // default value ?
NSUInteger myInteger; // default value ?

Bool myBool, если не инициализирован, получит значение по умолчанию False.

NSArray * myArray, если не выделено, инициализированный (например, NSArray *myArray = [[NSArray alloc] init];) будет иметь значение по умолчанию NIL. если вы вызовете count для унитизированного массива, вы получите исключение не 0.

//myClass.m
// myArray is not initialized, only declared in .h file

if ([myArray count] == 0) { => here it should crash because of [myArray count]

// do whatever

}

для NSUInteger myInteger значение по умолчанию должно быть 0, в документации сказано, что оно используется для описания целого числа без знака (хотя я не представлял целые числа с этим)

когда вы звоните [myObjectOnlyDeclaredAndNotInitialized myCustomFunction]; оно должно сломаться, выдается исключение.

надеюсь, это поможет

0 голосов
/ 14 апреля 2010

по умолчанию значение NSArray будет равно нулю, если вы не инициализируете его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...