Это работает, потому что синтаксис точки не имеет ничего общего со свойствами. Это просто синтаксический сахар (хотя мне это не нравится, так что, возможно, это "синтаксическая соль").
Когда вы используете точечный синтаксис в качестве r-значения выражения (или выражения справа от знака равенства), он просто поворачивается:
bar = myObject.thing;
В
bar = [myObject thing];
Когда точка находится слева от знака равенства (как l-значение), она превращается в установщик. Итак:
myObject.thing = 42;
Становится
[myObject setThing:42];
Так что да, вы можете делать такие вещи, как myObject.retain
. Но вы никогда не должны делать это . Вы должны когда-либо использовать точечный синтаксис только в качестве средства доступа к объявленным свойствам (то есть вещам, которые были явно объявлены через @property
). <вставить замечание о том, что вам никогда не следует использовать точечный синтаксис.>
Для получения дополнительной информации ознакомьтесь с документацией по синтаксису точки (в частности, раздел "неправильное использование").