Цель- C initWithInt против numberFromInt против просто @number? - PullRequest
0 голосов
/ 30 мая 2020

Совсем недавно в Objective- C, так как я только начал исследовать старый проект macOS для клиента. Одна вещь, которую я заметил, заключается в том, что при инициализации / присвоении значения int объекту NSNumber в Objective- C есть разные способы сделать это, например:

NSNumber *a = [NSNumber numberWithInt:10];
NSNumber *b = [[NSNumber alloc]initWithInt:10];
NSNumber *c = @10;

Насколько я понимаю видите, все они делают одно и то же, и последнюю строку легче всего набрать и прочитать, а вторая строка слишком запутана ИМХО, поэтому мне просто интересно, есть ли какие-либо реальные отличия в конечных результатах от этих три разных метода или ситуации, когда следует использовать один конкретный метод c, потому что другие не будут работать?

1 Ответ

1 голос
/ 30 мая 2020

Существует разница между a и b, которая была важна до AR C, когда управление памятью было ручным, но сегодня с автоматическим c управление памятью по существу не имеет значения для программиста, поскольку AR C обрабатывает

В до-AR C дней a ссылается на числовой объект, который не принадлежит, в то время как b ссылается на тот, который принадлежит, и ручное управление, необходимое для каждого, отличается и программист должен знать это.

В пост-AR C дней управление осуществляется автоматически c, и программисту обычно не нужно знать разницу.

Вариант c это сокращение для a, которое было введено позже и теперь является стандартным способом создания NSNumber объектов из буквальных значений. Форма @(<expr>) также предоставляется для создания объекта из результата вычисления .

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