Зачем разделять файлы .h и .m?
Исторически сложилось так, что в C, когда вы включали файл .h, это было почти буквально эквивалентно вставке файла в файл, который его включал. Фактически, все ваши объявления повторялись в каждом файле, который их использовал. Это нормально, в C вы можете повторять объявления сколько угодно, пока они не меняются. Однако повторение определений приведет к появлению нескольких копий функции и общей поломке. Следовательно, вы не можете включать весь код модуля, только его объявления.
Я думаю, что Objective-C на самом деле умнее, и вы могли бы, если хотите, вообще не иметь файлов .m и поместить весь код в файлы .h. Вы также можете определить класс только в файле .m и не иметь файла .h, но вы не можете создать такой проект целиком, поскольку ничто не сможет получить доступ к чему-либо еще.
Однако по-прежнему рекомендуется отделять объявления от определений. Это как иметь меню в ресторане вместо того, чтобы возвращаться на кухню и смотреть, что готовится. Файл .h - это краткое описание того, как другие модули могут использовать содержимое модуля.
Почему некоторые переменные экземпляра имеют свойства, а некоторые - нет?
Верно, отчасти это связано с тем, что переменные экземпляра не доступны автоматически другим классам. Свойства по умолчанию есть. Однако не обязательно. Вы можете сделать собственность частной.
Еще одна вещь, которую вы получаете со свойствами, - это автоматическое управление памятью. Если вы используете атрибут сохранения, когда вы присваиваете значение свойству, счетчик сохранения значения увеличивается, а счетчик сохранения предыдущего значения (если он есть) уменьшается. Это очень удобно и позволяет избежать наворотов. Даже если другие классы не имеют доступа к переменной экземпляра, это полезно. Если вы не используете свойства, вы должны убедиться, что выполняете соответствующие инструкции по сохранению и освобождению в методах экземпляра, чтобы избежать утечки памяти. Есть и другие варианты автоматического поведения свойств, например блокировка или копирование.
Наконец, вы можете получить встроенное поведение с атрибутами свойств и ключевым словом @synthesize, но вы также можете решить не использовать ключевое слово @synthesize и написать собственные методы получения и установки для своих свойств. Они могут делать необычные вещи, например обновлять связанные переменные экземпляра всякий раз, когда изменяется свойство.
person
morningstar
schedule
31.08.2011