2013-06-28 3 views
0

Что такое расширения классов и файлы заголовков? Каковы различия? В чем разница между объявлением свойства/метода в файле заголовка и расширением класса. Я совершенно новичок в объективном-c, так что начинающая терминология была бы полезной :)Расширение класса vs Заголовок файла

Заранее благодарен!

+0

По расширению класса, вы имеете в виду '@ class'? – popctrl

+0

@ AnthonyLawrence, нет, это передовая декларация. – vikingosegundo

ответ

2

Как следует из названия, они расширяют класс. Продолжение класса - это другое имя. Расширение класса обычно используется для объявления частных методов и свойств. Вы хотите, чтобы расширение класса было видимым для @implementation, а не в файле заголовка (т. Е. Вы хотите, чтобы расширение класса и @implementation находилось в MONClass.m).

Типы и методы в файле заголовка обычно предназначены для публичного доступа к любому клиенту.

Пример: Свойство объявлено в расширении класса не будет видно/доступно для клиентов, которые #import заголовка, но он будет использоваться в @implementation, потому что @implementation можно увидеть объявление о расширении класса.

Так что это можно использовать для подражания ограниченному доступу для ваших иваров и методов. Это полезно, поскольку методы и свойства ObjC не могут быть указаны как частные/защищенные/общедоступные (например, с использованием @public).

Расширения классов отличаются от категорий главным образом потому, что расширения могут объявлять хранение (например, свойства, которые будут создавать опорные ивары).

+0

Спасибо, что это был самый полезный способ объяснить это! Тем более, что я программирую на Java :) – golddove

2

A header file (.h) - это то, где вы публично объявляете свойства, методы и протоколы в существующем классе. Затем вы можете импортировать этот файл и, конечно же, использовать его для своей реализации.

расширение - еще один @interface в вашей реализации (.m) файл. Это расширяет внутреннюю реализацию импортированного заголовка, добавляя методы, которые не будут доступны, если кто-то или что-то еще импортирует заголовочный файл, связанный с классом.

Для получения дополнительной информации, ознакомьтесь с Apple's documentation on customizing existing classes

1

Q:What exactly are ... header files
A: Заголовочный файл - это файл, содержание которого компилятор 'вставляет' вместо #import... (#include и другие аналогичные директивы) линия. Заголовочные файлы содержат открытый код: форвардные объявления классов, перечислений, переменных, функций и т. Д.

Q:What exactly are class extensions …
A:Class Extension - это языковая конструкция, которая позволяет расширяет интерфейс класса.

Чтобы лучше понять, что это такое, вы должны понимать, что такое класс category.
Category - это языковая конструкция, которая позволяет добавлять функциональность (только методы!) К существующему классу. Даже без подкласса.
Пример:
Вы можете добавить новый метод NSImage:

@interface NSImage(YourExtensionName) 
- (CGImageRef)CGImage; 
@end 

Class Extension (также известный как класс продолжения, или unnamed category) имеет некоторое сходство с категорией, но она может быть добавлена ​​только к классу для которого у вас есть исходный код во время компиляции.
В class extension вы можете использовать то же самое, что используете в обычном блоке @interface.

Q:What are difference A: Заголовочный файл используется для включать в программу некоторые способности (структуры, типы данных, константы, функции и т.д.) один. Расширения класса используются для расширения существующего класса с некоторой функциональностью. Обычно class extension является частным интерфейсом класса. Функциональность, объявленная class extension, реализована в блоке @implementation для исходного класса, поэтому вы не можете, например, объявить расширение класса в классе фреймворка, например класс Cocoa или Cocoa Touch, такой как NSString.

Q:What is the difference between declaring a property/method in a header file vs in a class extension
A: Если вы объявляете свойство/метод в заголовочном файле, то любой пользователь .h файл может получить доступ к этой недвижимости/метод. Расширения класса используют для объявления частного интерфейса для вас.