objective-c 编程基础(五 分类)
2016-07-05 19:54
381 查看
一、分类(category)
1.分类可以使得不修改原来类的代码的基础上,对某个类进行方法的扩充,
分类的声明和实现如下:(代码的例子还是使用上一篇blog-OC核心语法的Person类),加入实现的Person类跟上篇blog 中是相同的。然后在此节中,我们创建一个Person 类的分类的Person+LP.h 和Person+LP.m 分别为扩展方法的类的声明和实现。
2. 分类的注意:分类只能扩充方法,不能增加成员变量的定义
3. 类和分类中的如果有相同名称的方法(如果相同的话会覆盖掉原来类的同名方法,导致原类的方法不可用)调用的顺序是:分类的方法优先级是最高的,然后才是原来类的方法的优先级次之。如果一个类有多个分类的时候,编译的时候的顺序,就是方法调用的优先级。
//
// Person+LP.h
// OC核心语法
//
// Created by LPMac on 14-5-31.
// Copyright (c) 2014年 itcast. All rights reserved.
//
#import "Person.h"
@interface Person (LP)
- (void)study;
@end
//
// Person+LP.m
// OC核心语法
//
// Created by LPMac on 14-5-31.
// Copyright (c) 2014年 itcast. All rights reserved.
//
#import "Person+LP.h"
@implementation Person (LP)
- (void)study
{
NSLog(@"正在学习----");
}
@end
//
// main.m
// OC核心语法
//
// Created by LPMac on 14-5-30.
// Copyright (c) 2014年 itcast. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Person+LP.h"
int main(int argc, const charchar * argv[])
{
@autoreleasepool {
Person *p1 = [[Person alloc]initWithAge:33 andName:@"jack"];
NSLog(@"年龄是:%d,名字是:%@",p1.age,p1.name);
//调用分类的方法
[p1 study];
}
return 0;
} 转载地址:http://blog.csdn.net/aipeng/article/details/27834013
1.分类可以使得不修改原来类的代码的基础上,对某个类进行方法的扩充,
分类的声明和实现如下:(代码的例子还是使用上一篇blog-OC核心语法的Person类),加入实现的Person类跟上篇blog 中是相同的。然后在此节中,我们创建一个Person 类的分类的Person+LP.h 和Person+LP.m 分别为扩展方法的类的声明和实现。
2. 分类的注意:分类只能扩充方法,不能增加成员变量的定义
3. 类和分类中的如果有相同名称的方法(如果相同的话会覆盖掉原来类的同名方法,导致原类的方法不可用)调用的顺序是:分类的方法优先级是最高的,然后才是原来类的方法的优先级次之。如果一个类有多个分类的时候,编译的时候的顺序,就是方法调用的优先级。
//
// Person+LP.h
// OC核心语法
//
// Created by LPMac on 14-5-31.
// Copyright (c) 2014年 itcast. All rights reserved.
//
#import "Person.h"
@interface Person (LP)
- (void)study;
@end
//
// Person+LP.m
// OC核心语法
//
// Created by LPMac on 14-5-31.
// Copyright (c) 2014年 itcast. All rights reserved.
//
#import "Person+LP.h"
@implementation Person (LP)
- (void)study
{
NSLog(@"正在学习----");
}
@end
//
// main.m
// OC核心语法
//
// Created by LPMac on 14-5-30.
// Copyright (c) 2014年 itcast. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Person+LP.h"
int main(int argc, const charchar * argv[])
{
@autoreleasepool {
Person *p1 = [[Person alloc]initWithAge:33 andName:@"jack"];
NSLog(@"年龄是:%d,名字是:%@",p1.age,p1.name);
//调用分类的方法
[p1 study];
}
return 0;
} 转载地址:http://blog.csdn.net/aipeng/article/details/27834013
相关文章推荐
- 移动开发----jsonObject和jsonArray
- objective-c语言学习笔记
- Objective-C实现一个简单的栈
- 多线程设计模式——Immutable Object(不可变对象)
- [精通Objective-C]进阶技巧:使用ARC
- JAVA int 强制类型转换错误提示(Cannot cast from Object to int)
- Parcelable encountered IOException writing serializable object (name = xxx)
- iOS学习(五)Objective-C 类的实例化
- iOS学习(四)Objective-C 类的实现
- ArcObject开发,程序编译通过,但无法启动的解决
- sys.sysobjects (Transact-SQL)
- iOS学习(三)Objective-C 类的声明
- block 注意事项
- Qt学习之路(10): Meta-Object系统
- [精通Objective-C]预处理器
- objective-c 小结
- hibernate异常:a different object with the same identifier value was already associated
- 如何自己动手实现 KVO
- [SharePoint]javascript client object model 获取lookup 类型的field的值,包括user类型(单人或者多人)的值。how to get the multiple user type/lookup type field value by Javascript client object model
- jQuery serializeObject 序列化form表单Json对象 jQuery.extend()合并对象