浅谈OC类别(Category)

简述

类别是一种为现有类添加新方法的方式,我们有时可以见到“类名称+类别名称”的命名方式。
类别可以添加属性property,但是不能添加实例变量。

一个实用的例子

下面我们来创建一个基于UILabel的类别,增加一个自适应Label的方法~

  • 我们先随意创建一个新类,用来存放类别代码,如命名为Tools
  • Tools.h中添加类别声明,如下:
@interface UILabel (KimiLabelCategroy)

//UILabel自动换行并调节字体尺寸以适应frame.size
- (void)kimiAutoAdjustsToContent:(NSString *)content;

@end

这里我特意添加前缀kimi,来避免方法名称冲突。

  • 接着,在Tools.m中实现方法:
@implementation UILabel (KimiLabelCategroy)
//UILabel自动换行并调节字体尺寸以适应frame.size
- (void)kimiAutoAdjustsToContent:(NSString *)content
{
    if ([self isKindOfClass:[UILabel class]])
    {
        //UILabel换行, A value of 0 means no limit
        self.numberOfLines = 0;

        //allow the label to be autosized to fit a certain width by scaling the font size(s)
        self.adjustsFontSizeToFitWidth = YES;

        self.text = content;
    }
    else
    {
        //NSException
    }
}
@end

该方法作用是根据content内容实现UILabel的自动换行和调整字体发小,使Label能够合理显示内容。

  • 使用这个类别的新方法,#import "Tools.h" 之后,对于一个现有的self.label,调用此方法:
[self.label kimiAutoAdjustsToContent:@"THE QUICK BROWN FOX JUMPS OVER A LAZY DOG."];

运行可以看到效果,self.label实现了自适应字体大小和换行:

kimiAutoAdjustsToContent

总结

这次给大家简要讲述了一下类别的概念,并结合一个实用的例子演示了其作用,希望能对大家有所帮助。
感谢阅读,如果您觉得本文有趣,欢迎转载,请注明出处~

你可能感兴趣的:(浅谈OC类别(Category))