Вызов аксессора в Objective-C - PullRequest
       42

Вызов аксессора в Objective-C

2 голосов
/ 13 декабря 2011

В чем разница между:

self.ivar;
self->ivar;
ivar;

Способ доступа к ivar в цели C.

Когда будет вызван сеттер?

Ответы [ 2 ]

7 голосов
/ 13 декабря 2011

self->ivar и ivar обращаются к переменной экземпляра напрямую. Метод доступа не вызывается.

foo = self.ivar вызовет метод доступа [self ivar] (или метод @property *1007*, если вы укажете его таким образом)

self.ivar = foo; вызовет метод доступа [self setIvar:foo] (или метод @property setter=).

1 голос
/ 13 декабря 2011

В средах, отличных от ARC, и self->ivar, и ivar не включают в себя вызовы Objective-C, а вместо этого устанавливают и получают скаляры из памяти. Точечный синтаксис (например, self.ivar или [self setIvar:]) вызывает Objective-C для метода установки / получения, который может управлять управлением памятью и т. Д. Apple @property включает в себя @synthesize, который пишет эти реализации методов для вас.

В средах ARC оба свойства и назначение ivar вручную включают некоторую логику управления памятью. Может даже случиться так, что в оптимизированных средах ARC использование @property просто использует встроенную логику ARC, вместо того, чтобы делать вызовы Objective-C всякий раз, когда это возможно.

...