您的位置:首页 > 移动开发 > Objective-C

Objective-C(七、分类和延展)——iOS开发基础

2015-07-01 21:05 811 查看
结合之前的学习笔记以及参考《Objective-C编程全解(第三版)》,对Objective-C知识点进行梳理总结。知识点一直在变,只是作为参考,以苹果官方文档为准~

七、分类和延展

1、分类(范畴,类目,类别……)

(1)创建方式:File New -> OS X -> Source -> Objective-C File -> Category+FileName+Class(Xcode6.3)

(2)作用:在不修改原始类模型的基础上,给某个类扩充方法。分类提供简单的方式将类的定义模块化到相应地分类中,不需要创建子类就可以扩充方法

(3)语法:(假设给NSObject类添加Sort排序分类)

命名规则:“原始类+分类名”,在新建时输入分类名Sort,系统会自动生成“NSObject+Sort.h”“NSObject+Sort.m”

声明:NSObject+Sort.h

#import <Foundation/Foundation.h>

 @interface NSObject (Sort)
 //分类中不能添加成员变量
 //{
 //    NSInteger _num;
 //}
 //报错:instance variables may not be placed in categories

 //扩充方法的声明
 - (void)methodA;
 - (void)methodB;

 @end


实现:NSObject+Sort.m

#import "NSObject+Sort.h"

 @implementation NSObject (Sort)
 //扩充方法的实现
 - (void)methodA {

 }

 - (void)methodB {

 }
 @end


(4)分类的优点

a、一个庞大的类可以
分功能模块进行开发
,思路更清晰,多人开发,利于团队合作;

b、在不修改原始类的基础上扩充方法;

c、不创建子类就能够进行当前类的方法扩充

(5)使用注意要点

a、分类只能扩充方法,不能扩充成员变量(要扩充用继承);

b、在分类方法中可以访问原始类中定义的成员变量;

c、分类允许重定义原始类中的方法,会覆盖原始类的方法,导致原方法不可用,不建议重定义

d、当原始类,不同分类中有相同方法时,只有最后编译的有效

编译顺序查看:双击









方法调用顺序:分类(最后参与编译的分类优先)——>原始类

2、延展(extension) 本质是分类

(1)语法

@interface 类名 () //括号里可写可不写
 //方法声明
 @end


(2)作用:

a、在.m中,作私有方法的声明,同时实现方法(私有方法命名方法名前加下划线);

在Student.m中

#import "Student.h"

 @interface Student (p1) //括号可写可不写,名字自己取

 - (void) _showInfo;

 @end

 //可写多个
 @interface Student (p2) //括号可写可不写,名字自己取

 - (void) _showInfo2;

 @end

 @implementation Student

 //私有方法实现
 - (void)_showInfo {
 //    XXX;
 }

 - (void)_showInfo2 {
 //    XXXX;
 }
 @end


b、在.h中,按照功能模块进行区分,方便阅读和查找;

Student.h文件中

#import <Foundation/Foundation.h>

 @interface Student : NSObject
 {
    //XXX;
 }
 - (void)methodA;

 @end

 @interface Student (p) //括号可写可不写,名字自己取

 - (void) showInfo; //公有方法,在.m中实现

 @end


c、在foundation框架中经常使用此语法,方法是公有的,例如NSString.h,NSArray.h
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: