Q: Являются ли интерфейсы C # и целевой объект c @prototypes одинаковыми? и когда функции внутри прототипа являются необязательными, и когда они являются обязательными.
A: Это в основном то же самое. Objective-C использует протоколы, такие как C # использует интерфейсы. По умолчанию все перечисленные методы являются обязательными (то есть компилятор будет жаловаться, если не увидит, что объект реализует метод, но программа все равно будет компилироваться).
Q: Что означает @property (nonatomic, retain)
A: @property
означает, что вы объявляете собственность. nonatomic
означает, что чтение / запись свойства не будет потокобезопасным, но это делает его намного быстрее. Если вам необходимо свойство безопасности потока, вы должны использовать atomic
(для которого вы просто опускаете nonatomic
, так как atomic
является значением по умолчанию. retain
означает, что retainCount автоматически увеличивается, когда вы устанавливаете свойство, поэтому вы не нужно выполнять вызов [someVariable retain]
самостоятельно. Это имеет серьезные последствия для управления памятью, поэтому вы часто будете видеть вызов для синтеза с подчеркнутым иваром, например: @synthesize myObject = _myObject;