Должен ли я всегда проверять, возвращает ли [[NSArray alloc] init…] ноль? - PullRequest
3 голосов
/ 26 февраля 2012

Должен ли я всегда проверять, возвращает ли [[NSArray alloc] init…] (или с любым другим классом коллекции) nil? Документы Apple говорят, что объекты могут возвращать nil, если не удается выделить или инициализировать. Я не знаю, когда инициализация может завершиться с NSArray, но я предполагаю, что выделение может завершиться неудачей при недостаточном объеме памяти. А поскольку я занимаюсь разработкой для iOS, это может стать обычной проблемой. Нужно ли мне об этом и проверять каждый раз, когда я хочу создать новый массив, или произойдет сбой моего приложения из-за ограничений памяти (при условии, конечно, в худшем случае) и проверка на nil просто трата циклов?

В настоящее время я проверяю только когда я выделяю изменяемую коллекцию с большой заранее определенной емкостью (например, [NSMutableArray arrayWithCapacity: 1000]) или неизменную коллекцию с большим количеством объектов (более тысячи).

Спасибо.

1 Ответ

2 голосов
/ 26 февраля 2012

Нет, не с NSArray.NSArray - это связанный список, использующий структуры, поэтому он не стоит malloc за кулисами.Проверка на nil, по крайней мере, с помощью NSArray довольно бессмысленна.

Однако, если вы использовали, например, класс коллекции CCArray, из cocos2d, тогда проверка на nil с большим массивом может быть полезной.

Тем не менее, размер указателя на iOS составляет 8 байт, и даже C-массив из 1000 элементов занимает всего 8 КБ ОЗУ.В большинстве случаев вы не будете использовать достаточно памяти до того момента, когда у вас закончится.

Также обратите внимание, что если вы дошли до того, что у вашего приложения не хватает памяти, есть много методов делегатов.что вы можете зарегистрироваться, чтобы получить предупреждение об этом и исправить это.

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