美文网首页
类目和延展的作用和区别

类目和延展的作用和区别

作者: 御风邪物 | 来源:发表于2016-06-28 16:24 被阅读149次

类目和延展的作用都是为了扩展一个类。
一、类目的定义和作用

  类目也叫分类,英文Category,在没有原类.m文件的基础上,给该类添加方法。
  比如,NSString类原本没有helloString方法,我们又没有NSString类的原代码,那我们想给NSString
类添加一个helloString的方法,只有通过声明子类或者类目才可以达到这个目的。

二、类目的声明:

@interface NSString (hello)
-(void)helloString;
@end

三、类目实现:

@implementation NSString (hello)
-(void)helloString{
  NSLog(@"my name is %@,I am a string",self);
}
@end
文件名:
  NSString+hello.h
使用:
  NSString *str = @"蓝鸥科技";
  [str helloString];
打印输出:
my name is 蓝鸥科技,I am a string
helloString 实现里面用到的self就是调用这个方法的实例本身。

四、类目使用需要注意的问题:

  1、类目里不能添加实例变量,但是类目声明可以用属性,其实属性就是一对儿方法,那么在.m里面需要实现
这个属性的setter方法和getter方法,在这两个实现方法里面依然不能使用自己添加的实例变量。
  2、类目里添加的方法不能和原始类中的方法重名,否则会导致覆盖。
  3、一个类可以添加多个类目,但是类目名和方法名不能重复。
  4、类目中的方法可以成为原始类的一部分,和原始类方法级别相同,可以被子类继承。

延展也叫Extension:
延展是一种特殊形式的类目,主要是在一个类的.m里面声明与实现
延展的作用:就是给某类添加私有方法或私有变量

比如RootViewController.m
@interface RootViewController (){
  NSString *aString ;
}
-(void)test1;
-(void)test2;
@end
@implementation RootViewController
-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{
  self = [super initWithNibName:nibNameOrNilbundle:nibBundleOrNil];
  if (self) {
    // Custom initialization
  }
  return self;
}
@end
上面@interface @end定义的就是一个延展,主要定义了RootViewController的私有方法和私有变量。

五、使用延展需要注意的几个问题:

  1、如果括号里没有类目名,则认为延展里面的方法为全都必须实现,如果有名,则认为是可选实现。
  2、虽然延展是给一个类定义私有方法,但是没有OC没有绝对的私有方法,其实还是可以调用,另外延展里面
声明的变量只能在该类内部使用,外界访问不了。
  3、如果是新建文件建的某类延展.h文件,则不能加实例变量。

相关文章

  • 类目和延展的作用和区别

    类目和延展的作用都是为了扩展一个类。一、类目的定义和作用 二、类目的声明: 三、类目实现: 四、类目使用需要注意的...

  • 类目与延展的作用和区别

    今天下午我的朋友问我类目与延展的区别,恩,寻思了一会和他简单的说了几句,接下来结合资料说一说作用于区别吧 类目和延...

  • 分类和延展

    先说说类目和延展分别有什么作用和区别: 分类的作用: 是给没有.m文件的类扩展方法(如NSString类),不能添...

  • 类目和延展

    0、封装 一、类目(category)的基本概念和用法 1、封装是面向对象的一个特征,OC也不意外,但有时候我们会...

  • 类目和延展

    main.h 1.延展Person_PersonExtension.h Person.h Person.m 2.为...

  • iOS分类、延展和子类的区别

    iOS分类、延展和子类的区别 类别、延展、子类的区别 | 类别 | 延展 | 子类--------|-------...

  • 类目、延展

    目录:1、类目2、延展 1、类目(类别)Category 1.从定义看类目就是给类来添加一个眼睛?,哈哈,其实就是...

  • 分类和延展的区别

    1.分类的括号中有名字而延展没有2.分类没有属性,只提供get和set方法,而延展中有属性和get、set方法3....

  • 类目和继承 的区别

    1、 类别(category)和继承的区别?*类别:类别是对一个功能完备的类的一种补充,就像是一个东西的主要基本功...

  • 类目 延展 协议

    前言 Objective-C中提供了可以让我们扩展类定义的手段:类目,延展和协议。类目:为已知的类增加新的方法;延...

网友评论

      本文标题:类目和延展的作用和区别

      本文链接:https://www.haomeiwen.com/subject/zvytjttx.html