Я программирую для платформы iOS последние несколько лет, но в основном использую swift.Однако в последние месяцы передо мной был задан проект, использующий Objective C, и, хотя он мне понравился, и мне было легко его освоить, есть некоторые вопросы, в основном о переменных, которые я до сих пор не совсем понимаю.
1) В чем разница между объявлением переменной экземпляра и свойством?Поскольку компилятор автоматически создает переменную экземпляра для каждого свойства, есть ли реальное преимущество, кроме возможности передавать некоторые параметры, такие как атомарный, неатомарный, сильный, слабый, назначить и т. Д.?
2) В чем разницамежду объявлением переменных в @implementation или свойствами @interface внутри файла .m?Из того, что я понимаю, объявление в @implementation делает его статической переменной, а объявление в @interface делает его переменной экземпляра, это правильно?Кроме того, почему классы, которые наследуются от UIViewController (например), уже имеют @interface в файле .m, а классы, которые наследуют от NSObject, не имеют?
3) (Личный вопрос) Вы обычно устанавливаете свойство как атомарное или неатомарное?Я считаю, что атомарный лучше, потому что, хотя он и медленнее, он безопасен для потоков, но я вижу, что большинство людей используют неатомные.Разница в скорости все еще заметна в настоящее время в зависимости от количества энергии, которое у нас есть?
4) Всякий раз, когда я объявляю две переменные экземпляра с одинаковыми именами в @implementation в двух разных классах, я получаю ошибку «duplicate symbol».Почему это происходит?
Еще один простой вопрос из любопытства: я вижу много вопросов, где в коде @interface есть фигурные скобки, но в моем коде я его никогда не видел, скорее он заканчивается на@ заканчивается как файл @implementation.Было ли это в более ранних версиях Obj-C или есть какая-то реальная разница?
Большое спасибо, я знаю, что это 4 или 5 вопросов, но я так быстро запрыгнул в проект, и я думаю, что мне действительно нужноизучить основы, которые я пропустил, потому что не смог найти ответы на эти вопросы.