Если вы не используете точечный синтаксис, вы не используете никакой метод установки или получения.
Следующее, это зависит от того, как было объявлено свойство.
Давайте предположим, что-то вроде этого:
@property (nonatomic, retain) Article *article;
...
@synthesize article;
Назначение чего-либо для статьи с
self.article = [[Article alloc] init];
сохранит экземпляр, возвращенный alloc / init, и вызовет утечку. Это потому, что установщик статьи сохранит его и выпустит любой предыдущий экземпляр для вас.
Так что вы можете переписать его как:
self.article = [[[Article alloc] init] autorelease];
Делаем это
article = [[Article alloc] init];
тоже нормально, но может привести к утечке, поскольку статья может содержать ссылку на экземпляр уже. Таким образом, будет необходимо освободить значение заранее:
[article release];
article = [[Article alloc] init];
Освобождение памяти можно сделать с помощью
[article release];
или с
self.article = nil;
Первый действительно получает доступ к полю напрямую, без участия установщиков / получателей. Второй устанавливает ноль в поле с помощью установщика. Который освободит текущий экземпляр, если таковой имеется, прежде чем установить его на ноль.
Эта конструкция
self.myString = nil;
[myString release];
слишком много, на самом деле он отправляет релиз в ноль, что безвредно, но и бесполезно.
Вы просто должны мысленно отобразить, используя синтаксис точки, используя методы доступа:
self.article = newArticle
// is
[self setArticle:newArticle];
и
myArticle = self.article;
// is
myArticle = [self article];
Некоторые предложения по прочтению, все официальные документы Apple:
Язык программирования Objective-C
Руководство по программированию управления памятью