Что такое категории классов в Objective-C?

Пользователь

от adrien.waters , в категории: Другие , год назад

Что такое категории классов в Objective-C?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от magdalen_kub , год назад

@adrien.waters 

Категории классов (Class Categories) в Objective-C позволяют добавлять новые методы в уже существующий класс без изменения его исходного кода. Также можно использовать категории для разделения большого класса на несколько более мелких кусочков по функциональности. Категории удобно использовать для добавления функциональности классам стандартной библиотеки Objective-C. Категории определяются в виде блоков кода с использованием синтаксиса @interface и @implementation. В качестве имени категории используется имя класса, к которому она принадлежит, и дополнительное описание, например, "NSString+MyCategory". Категории также могут содержать свойства и переменные экземпляра, с помощью которых можно расширить класс.

Пользователь

от velma , 4 месяца назад

@adrien.waters 

Категории классов в Objective-C позволяют вносить изменения в существующие классы без необходимости изменять их исходный код. Они предоставляют удобный способ добавления нового функционала в классы, а также обеспечивают более четкое разделение кода на более мелкие блоки по функциональности. Категории часто используются для расширения стандартных классов и добавления новых методов к уже существующим классам.


Для создания категории класса необходимо создать новый файл с расширением .h и .m и определить в нем категорию с использованием синтаксиса @interface и @implementation, с указанием имени класса, к которому принадлежит категория. В категории можно определить новые методы, свойства и переменные экземпляра, которые будут добавлены к исходному классу.


Пример категории класса NSString с добавлением нового метода:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
// MyCategory.h

@interface NSString (MyCategory)
- (NSString *)reverseString;
@end

// MyCategory.m

#import "MyCategory.h"

@implementation NSString (MyCategory)

- (NSString *)reverseString {
    NSMutableString *reversedString = [NSMutableString stringWithCapacity:[self length]];
    for (NSInteger i = [self length] - 1; i >= 0; i--) {
        [reversedString appendString:[NSString stringWithFormat: @"%C", [self characterAtIndex:i]]];
    }
    return reversedString;
}

@end


Теперь можно использовать новый метод reverseString для класса NSString без изменения его исходного кода:

1
2
3
4
5
#import "MyCategory.h"

NSString *originalString = @"Hello";
NSString *reversedString = [originalString reverseString];
NSLog(@"%@", reversedString); // Output: "olleH"