美文网首页OC开发iOS Developer
类目与延展的作用和区别

类目与延展的作用和区别

作者: JonesCxy | 来源:发表于2017-04-21 16:36 被阅读66次

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

类目和延展的作用都是为了扩展一个类

一.类目==分类==category,在没有原类.m文件的基础上,给类添加方法,当然有.m也可以,只不过没人这么办罢了.

比如:NSObject类我们没有.m文件,但是还想给此类添加一个hello方法,方便使用,只有通过声明子类或者添加类目才可以达到这个目的.

二.类目的声明:

@interface NSObject (hello)

- (void)hello;

@end

三、类目实现:

@implementation NSObject (hello)

- (void)hello

{

  NSLog(@"my name is %@,I am a string",self);

}
@end

文件名:

NSObject+hello.h

使用:

NSString *str = @"beijing";

[str hello];

打印输出:

my name is beijing,I am a string

hello 实现里面用到的self就是调用这个方法的实例本身。

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

五.延展==Extentsion:
延展是一种特殊类型的类目,主要是在一个类的.m里面声明与实现
延展的作用:就是给某类添加私有方法或私有变量
比如RootViewController.m

@interface RootViewController ()

{

NSString * aString ;

}

- (void)test1;

- (void)test2;

@end

.m

@implementationRootViewController

- (id)initWithNibName:(NSString *)nibNameOrNilbundle:(NSBundle *)nibBundleOrNil

{

self = [superinitWithNibName:nibNameOrNilbundle:nibBundleOrNil];

if (self) {

        // Custominitialization

    }

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.为...

  • 类目、延展

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

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

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

  • 类目 延展 协议

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

  • OC类目、延展

    类目: 定义:为现有工程中的类和系统类添加新的方法 作用:在类目中添加新的方法及属性和在原类中添加方法和属性是一样...

  • ios 类目(类别),延展(扩展),代理的区别

    转载自明成伟俊 一、首先类目(类别)Category 从定义看类目就是给类来添加一个眼睛?,哈哈,其实就是添加方法...

网友评论

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

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