-----------------------------------------------Category--------------------------------------

类目 是在原有类的基础上 添加方法,在使用的时候只需要用原有类实例化出来的对象,调用即可。在类目里面 不可以添加变量、属性,只能添加方法。

1.实际开发在什么情况下使用呢?

答:扩展已经封装好的类(不希望再改变原有类)这种情况下只能用 类目

在团队里面 分工开发一个模块的时候 使用Category

2.不要覆盖原有类的方法,这样会引起super消息的断裂,因为类目的中的方法具有更高的优先级。

3.类目 和 继承 有什么不同

继承:可以扩展父类的方法,可以添加实例变量,属性。

类目:可以扩展原有类的方法;不可以可以添加实例变量,属性。

4.扩展方法的调用方式

继承:用子类的对象,调用扩展方法。

类目:依然使用原有类的对象调用。

5.新建Object -C.file文件 会出现原有类+(你所建的扩展内容的名字);

例:扩展数组

代码:

在.h文件中声明你所需要扩展的方法:

#import <Foundation/Foundation.h>

@interface NSArray (Arr)

-(NSString *)link;

@end

在.m文件中实现你所需要扩展的方法:

#import "NSArray+Arr.h"

@implementation NSArray (Arr)

-(NSString *)link{

NSMutableString *str = [[NSMutableString alloc]init];

for (id n in self)

[str appendString:n];

return str;

}

@end

在主文件中调用:

NSArray *y = @[@“我爱中国”,@"我爱oc",@"我爱青山绿水"];

NSLog(@"%@",[y link ]);

输出的结果为:

我爱中国我爱oc我爱青山绿水

--------------------------------------------Extension---------------------------------------

类的延展 就是在类中添加私有方法、变量,延展中的声明的方法在类本身的@interfance 类名 ()和它对应的@end之间实现

类有时需要方法只有自己可见,这时我们可以通过延展的方式定义类的私有方法

但是这种方式和之前定义的@private的区别

两者的区别就是@private在.h文件中定义的,一个延展是在.m文件中定义的

如果是开源的话,一般是开放.h文件

如果是闭源的话,一般只开放.m文件

注意:私有方法,只是在.m文件中定义了,没有在.h文件中声明,一般是在类中自己使用的

创建延展有两种方式:

1.新建Object-C.file——>extension,出现oo.h文件

2.直接在类的.m文件中,在@implementation上面 输入

@interface see()

@end

例:

新建一个Person类。在其.m文件中:

//添加一个私有的变量和方法。

#import “Penson.h"

@interface Penson()

{

NSString *name;

}

-(void)name;

@end

@implementation Penson

-(void)name{

name = @"人物";

NSLog(@"%@你创建成功了",name);

}

-(void)impli:(NSString *)k{

NSLog(@"%@",k);

[self name];

}

@end

Protol------------------------------Protocol-------------------------------------------

1.协议可以被任何类实现的方法,协议本身不是类,它是定义了一个其他类可以实现的接口。

协议是 只声明 不实现

(没有实现的类目 又叫 非正式协议。

因为一般情况下类都从NSObject继承

2.非正式协议是以圆括号()表示,而正式协议是以<>来表示的 协议是用尖括号来引入

在哪一个类里面导入了协议 就在哪一个类里面 实现这个协议方法

//        默认的都是required强制实现的方法,不实现就报错。

//        选择实现的 @optional 可以实现的 可以不实现。

新建协议后,只会出现一个.h文件

@protocol xieyi <NSObject>

-(void)fangfa;

@optional

-(void)fangfa1;

@end

在某一个类中引入xieyi.h这个协议后。

-(void)fangfa;这个方法必须要实现,不然就报错

而-(void)fangfa1;加了@optional 后,可以选择实现或者不实现。不实现也不会报错。

注意:如果在类中要引入多个协议 可以,号隔开@interface Person : NSObject<xixieyi,shangke,zixi,zongjie>

oc-类目、延展、协议的更多相关文章

  1. Objective-C学习笔记类目、协议

    不是所有的方法都可以被覆盖的!比如:intValue就不能被覆盖!! 原因正在查找中! 别人的电脑上却可以! 类目.h件 #import <Foundation/Foundation.h> ...

  2. objective-c 类目(Category)和延展(Extension)

    类目的基本概念: 如果有封装好的一个类,随着程序功能的增加,需要在类中增加一个方法,那我们就不必在那个类中做修改或者再定义一个子类,只需要在用到那个方法时添加一个该类的类目即可. 1.在类目定义的方法 ...

  3. OC中协议, 类目, 时间, 延展, 属性

    只有继承和协议需要引IMPORT "头文件"; 必须接受marryprotocol协议, id<marryprotocol>基于类型的限定, 才能给实例变量赋值 @pr ...

  4. OC 中 类目、延展和协议

    Category : 也叫分类,类目. *是 为没有源代码的类 扩充功能 *扩充的功能会成为原有类的一部分,可以通过原有类或者原有类的对象直接调用,并且可继承 *该方法只能扩充方法,不能扩充实例变量 ...

  5. Objective-C中的类目,延展,协议

    Objective-C中的类目(Category),延展(Extension),协议(Protocol)这些名词看起来挺牛的,瞬间感觉OC好高大上.在其他OOP语言中就没见过这些名词,刚看到这三个名词 ...

  6. Object-C里的类目,延展,协议

    1.类目 类目就是为已存在的类添加新的方法.但是不能添加实例变量.比如系统的类,我们看不到他的.m文件,所以没有办法用直接添加方法的方式去实现. @interface NSMutableArray ( ...

  7. iOS -类目,延展,协议

    1.类目 类目就是为已存在的类添加新的方法.但是不能添加实例变量.比如系统的类,我们看不到他的.m文件,所以没有办法用直接添加方法的方式去实现. @interface NSMutableArray ( ...

  8. object-c中的类目,延展,协议

    协议 协议只有方法的声明(类似于其他编程语言的接口)   协议相当于大家都所遵循的 关键字 @protocol 协议名 <所遵循的协议> 默认NSObject   @end     @pr ...

  9. 寒假 OC-代理,类目,内存,协议,延展,数组,字典,集合

     OC04字符串博客:1.http://www.cnblogs.com/heyonggang/p/3452556.html (字符串常用方法)2.http://blog.sina.com.cn/s/b ...

  10. OC: 类的扩展、类的延展、协议、 NSDate

      NSDateFormatter 指定⽇日期格式: NSDateFormatter * formatter = [[NSDateFormatter alloc] init]; [formatter ...

随机推荐

  1. css中常用的hack

    <!DOCTYPE html> <html> <head> <title>Css Hack</title> <style> #t ...

  2. VS2010 安装使用STLPort

    VS2010 安装使用STLport 1.本机环境 win7 64位 visual studio 2010 中文旗舰版 STLport-5.2.1.tar.bz2 2.下载STLport http:/ ...

  3. python 的一些小技巧

    赋值: a, b, c = 'xixi', 'haha', 'hehe' 连接字典: >>> s = {1:'a', 2:'b', 3:'c'} >>> s.key ...

  4. Android高效加载大图,多图解决方案,有效避免程序OOM异常

    收藏自:http://blog.csdn.net/guolin_blog/article/details/9316683 谷歌官方文档:http://developer.android.com/tra ...

  5. Kmeans算法的应用实例(Matlab版本)

    K-means是一种经典的聚类算法,是十大经典数据挖掘算法之一.K-means算法的基本思想是:以空间中k个点为中心进行聚类,对最靠近他们的对象归类.通过迭代的方法,逐次更新各聚类中心的值,直至得到最 ...

  6. Testing Round #8 A. IQ Test 水题

    题目链接:http://codeforces.com/problemset/problem/328/A 这道题目wa了一次,注意这句话: You should also print 42 if the ...

  7. Apache配置站点根目录、用户目录及页面访问属性

    一.配置站点根目录及页面访问属性 DocumentRoot "/www/htdoc" <Directory "/www/htdoc"> Option ...

  8. hdu1025 dp(最长上升子序列LIS)

    题意:有一些穷国和一些富国分别排在两条直线上,每个穷国和一个富国之间可以建道路,但是路不能交叉,给出每个穷国和富国的联系,求最多能建多少条路 我一开始在想有点像二分图匹配orz,很快就发现,当我把穷国 ...

  9. ARM的工作模式和寄存器

    以前学的时候学的是S3C6410的开发板,它是三星公司推出的基于ARM v6架构(指令集),处理器是ARM11. ARM架构是构建每个ARM处理器的基础. 目前最新的是ARM v8架构:http:// ...

  10. about JNI

    1.Java对C/C++事件处理的封装JIT(Just in Time.Java语言的原动态编译技术) 大多数的游戏引擎都是使用可移植的C语言开发的,然后通过简单的封装以适应特殊的平台. 2.Andr ...