Как я могу получить NSNumber, не выполняя alloc для него, чтобы он отвечал на initWithInt? - PullRequest
3 голосов
/ 05 сентября 2010

Насколько я понимаю, такой «удобный» метод, как [nsnumber initWithInt], должен создать копию указанного класса, инициализированную до желаемого значения.

minutesLeft=[NSNumber initWithInt:((timeLeft)%60)];

Timeleft - целое число, поэтому initWithInt долженработать, и результатом должно быть то, что minutesLeft (свойство, установленное для сохранения) должно получать, а затем сохранять новый NSNumber.Проблема в том, что по какой-то причине я получаю предупреждение о том, что «NSNumber может не отвечать на + initWithInt».Поскольку рассматриваемое свойство настроено на сохранение, я не хочу использовать [nsnumber alloc] initwithint, потому что тогда мне нужно его освободить.

Есть идеи?

Ответы [ 2 ]

4 голосов
/ 05 сентября 2010

Вы имеете в виду как: [NSNumber numberWithInt:number]; Имейте в виду, что это значение автоматически высвобождается, поэтому вам может потребоваться сохранить его. Если вы работаете на Mac, не беспокойтесь об этом.

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

http://cocoadevcentral.com/d/learn_objectivec/

2 голосов
/ 05 сентября 2010

Поскольку создатели удобства не всегда доступны, то есть:

self.minutesLeft = [NSNumber numberWithInt:number];

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

self.minutesLeft = [[[NSNumber alloc] initWithInt:number] autorelease];

или, наконец,

NSNumber * n = [[NSNumber alloc] initWithInt:number];
self.minutesLeft = n;
[n release], n = 0;

Кроме того, я думаю, что было бы неплохо предположить, что новый код должен быть написан так, чтобы он был совместим с управляемой памятью (а не сборщиком мусора). Отслеживание объекта, которому была отправлена ​​дополнительная авто-версия, может занять очень много времени, если вы когда-либо будете использовать программу в контексте управляемой памяти. Вероятно, будет много ошибок, которые трудно отследить или воспроизвести (в том числе крупные утечки). Написание интерфейсов / процедур подсчета ссылок должно быть второй натурой - это очень легко написать, когда вы пишете класс, вместо того, чтобы заняться им позже (читай: вам придется прочитать много кода, который занимает очень много времени) - тогда вам придется тестировать, тестировать, тестировать все обновленные программы.

...