2015-01-06 2 views
0

Я смотрю на Ray Wenderlich AFNetworking tutorial, и я наткнулся на способ подклассов NSDictionary, что я не видел раньше:подклассов NSDictionary так: @implementation NSDictionary (погода)

первый:

@implementation NSDictionary (weather) 

то в другом файле:

@implementation NSDictionary (weather_package) 

Это кажется просто «работа» в другом файле, где он включен. Самое недоумение в том, что NSDictionary, определенный в классе, который использует их, похоже, соответствует версии «weather_package», а в этом контейнере - «погода».

Может кто-нибудь указать мне на то, что здесь происходит? Я не совсем понимаю, как это работает при анализе кода, особенно в том, как компилятор решает, что применять, поскольку, поскольку явная ссылка на эти файлы не содержится, помимо включения их в заголовок.

Благодарим за помощь.

ответ

2

Это не подкласс. Это расширяет класс с помощью категорий. Это используется для добавления новых функциональных возможностей в существующие классы без их подклассификации.

Категория может быть объявлена ​​для любого класса, даже если у вас нет исходного исходного кода реализации (например, для стандартных классов Cocoa или Cocoa Touch). Любые методы, которые вы объявляете в категории, будут доступны для всех экземпляров исходного класса, а также для любых подклассов исходного класса. Во время выполнения нет никакой разницы между методом, добавленным категорией, и тем, который реализуется исходным классом.

категория может быть определена как

@interface ClassName (CategoryName) 

@end 

@implementation ClassName (CategoryName) 

@end 

Для получения более подробной информации читайте https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/CustomizingExistingClasses/CustomizingExistingClasses.html#//apple_ref/doc/uid/TP40011210-CH6-SW1

+0

спасибо! Это очень полезно. –

Смежные вопросы