Являются ли интерфейсы C # и объектные c @prototypes одинаковыми? - PullRequest
2 голосов
/ 29 июля 2011

1) Являются ли интерфейсы C # и целевой объект c @prototypes одинаковыми? и когда функции внутри прототипа являются необязательными, и когда они являются обязательными.

2) Что означает @property (неатомный, оставьте)

Я новичок в объективной среде c, поражен этими понятиями. Пожалуйста, помогите мне решить эту проблему.

Ответы [ 4 ]

2 голосов
/ 29 июля 2011

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;

1 голос
/ 29 июля 2011

1) Полагаю, вы имеете в виду протоколы.Протоколы близки к интерфейсам в C # (и Java), но семантика отличается тем, что метод, получающий сообщение, не должен реализовывать метод.Тогда сообщение игнорируется.Также отправка сообщений (т. Е. Вызов методов в C #) может быть выполнена для nil (т. Е. Null в C #), и ничего не произойдет.

2) @property (nonatmoic, retain) - это объявление свойства (которое являетсяпара методов, один получатель и один установщик).Они могут быть автоматически реализованы с помощью ключевого слова @synthesize.неатомичным является то, что безопасность потоков не должна быть реализована.сохранить то, что счетчик ссылок на объекты должен быть увеличен / уменьшен в установщике.

0 голосов
/ 18 мая 2012

Существует огромная разница, которую люди пропускают:

Вы можете объявить переменные типа Interface в C # (как в Java), но вы не можете объявить переменные типа protocol.

0 голосов
/ 29 июля 2011

1) Я полагаю, что вы имеете в виду протоколы, формальные протоколы с нотацией @protocol, почти такие же, как интерфейс C #, различие ks в том, что протокол позволяет вам указать некоторые дополнительные методы, т.е. некоторые методы, которые Вы не обязаны выполнять.

2) Свойство является эквивалентом переменной экземпляра для класса, и оно может быть @synthetized для автоматической генерации методов установки и получения для этого свойства. Он может быть объявлен атомарным или неатомарным, что означает, будут ли сеттер и геттеры выполняться как отдельная операция или нет. Он также может быть объявлен как сохранить, скопировать или назначить. Сохранение означает, что ivar будет отправлять сохраняемое сообщение в объект obj в сгенерированном установщике, копирование означает, что установщик клонирует экземпляр и затем отправляет ему сохраняемое сообщение, в то время как назначение означает, что значение будет просто назначено без сохраняющего сообщения.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...