Я не очень понимаю, что
они не будут добавлены в виду, когда вы хотите этого.
средства, но вот история:
Каждый объект выделяется с помощью +alloc
. Честно говоря, это +allocWithZone:
, но это не имеет никакого значения в этом месте.
Самое первое сообщение, которое вы должны отправить вновь созданному экземпляру объекта (помните: вы отправили +alloc
объекту класса), является сообщением об инициализации, что-то вроде init…
. Для того, чтобы поставить это вместе, вы найдете код, как:
… [[TheClass alloc] init…] …;
Потому что это скучное типирование есть new
распределители. Они поставили это сообщение в одно:
… [TheClass new…] …;
(Это имеет некоторые преимущества для класса Implementor, тоже, но это прозрачно для вас Думайте об этом, как отправка +alloc
, -init…
.).
В прежние времена это была хорошая идея, чтобы отправить сообщение autorelease к нему в качестве следующего шага по ряду причин:
… [[[TheClass alloc] init…] autorelease] …;
Это было положить вместе удобство распределителей:
… [TheClass theClass…] …
Это то, что вы находите большую часть времени при чтении старого кода. Используя ARC, вам больше не нужны удобные распределители: нет авторекламы. Поэтому больше нет причин для удобных распределителей. Но у нас был MRR в течение многих лет, и есть еще много распределителей удобства. (Теперь называются фабричные методы, но CA - это только их подмножество. Подмножество, которое вам не нужно заботиться. Все это с ARC.) Поскольку существует множество CA, они все еще используют их. (И есть проблема с ними. В настоящее время я пишу только распределители new
, которые имеют преимущества CA, но не недостаток автореферата.)
Короче говоря: вы просто не видите иногда используется +alloc
.
будет ли он автореализован без дуги, потому что autorelease вызывается в методе arrayWithObjects? – DevilInDisguise
Да, arrayWithObjects возвращает вам автореализованный объект. – Thyraz
sry, u написал, что в вашем ответе, не знаю, что я думал :) Книга, которую я читаю atm, не выпустила никаких объектов, которые были выделены, как ваш первый пример или когда вы делаете [NSString alloc ] initWithString: @ "XXX"]; initWithObjects NSArray также ссылаются на авторекламу в ее реализации? – DevilInDisguise