synthesize someString = _someString;
Это говорит синтезировать свойство someString
но для прямого доступа, используйте _somestring
.
synthesize someString2;
Это говорит синтезировать свойство someString2
но для прямого доступа, используйте someString2
.
Думай о нем, как если компилятор генерации Иварс для вас, но в первом случае Ивар называется _someString
и второй называется someString2
Это общее использование (я недавно переехал к нему), так что, когда вы имеете дело с объектом напрямую (например, инициализаторы или в dealloc
, где вы не должны использовать self
), вы можете сразу увидеть, что при написании _someString = @"aString";
вы не будете использовать методы свойств, которые применяли бы типы управления памятью (таких как сохранение или копирование). Раньше было распространено то, что люди будут напрямую присваивать ценности, а затем задаются вопросом, почему они не были сохранены.
[_someString release];
[_someString2 release];
Отправляет метод выпуска непосредственно на объект.
self.someString = nil;
self.someString2 = nil;
Отправляет выпуск через собственность. В этом случае нет никакой разницы. Там будет разница, если вы выделения объектов, например:
_someString = someOtherString;
ли утечка (за исключением случаев, АРК, который я пришел позже), потому что вы просто положить в новый объект в хранилище, без освобождения текущего объекта.
self.someString = someOtherString;
ничего не течет, потому что синтезированный сеттер выпустит текущий объект перед установкой (и удержания) новый объект.
Я сказал, что приеду в АРК. В таком случае вы не можете позвонить release
в любом случае, поэтому вопросов не возникает, но _someString = someOtherString
не является утечкой, потому что компилятор будет заниматься выпуском текущего объекта для вас.
Как появился _someString2 здесь? – beryllium