OC高级(二)
来源:互联网 发布:企业网站开源cms 编辑:程序博客网 时间:2024/06/06 09:22
Category:分类、类目,为已有的类添加方法,扩展一个类的功能。添加的方法成为原始类的一部分,能被子类继承。不能添加变量。
为没有源代码的类添加方法。
#import <Foundation/Foundation.h>//NSString+Say.h文件@interface NSString (Say)+ (void)sayHi;- (NSString *)addSomeString:(NSString *)str;@end
#import "NSString+Say.h"//NSString+Say.m文件@implementation NSString (Say)+ (void)sayHi{ NSLog(@"Hi");}- (NSString *)addSomeString:(NSString *)str{ return [self stringByAppendingString:str];}@end
Extension:延展,作用为管理类的私有接口。
面向对象编程也叫面向接口编程。
类中对外公开的方法叫接口,Extension的功能是管理内部使用的方法(私有方法)。
代码写在原始类的.m文件中。
#import "Person.h"@interface Person ()//Extension延展{ NSInteger _age;//添加实例变量}- (void)sayHi;//帮助管理私有方法@end
Protocol:协议,为一堆方法的声明,只有.h文件,接受协议的对象实现协议中定义的方法。
#import <Foundation/Foundation.h>@protocol MyProtocol <NSObject>@optional//可选实现- (void)SayHi;@required//必须实现(默认)- (void)eat;@end@protocol YourProtocol <NSObject>- (void)play;@end对象的.h文件签名,在.m文件中实现上面协议中的方法。
#import <Foundation/Foundation.h>#import "MyProtocol.h"@interface Person : NSObject <MyProtocol,YourProtocol>@end
delegate设计模式:Protocol的核心使用场景是实现delegate设计模式。
首先建立一个协议DoProtocol.h
#import <Foundation/Foundation.h>@protocol DoProtocol <NSObject> @required- (void)makeMoney; @optional- (void)doHomework;@end新建一个Gril类(女孩通过协议找一个男孩来实现方法)
#import <Foundation/Foundation.h>#import "DoProtocol.h"@interface Girl : NSObject{ NSString *_name; id<DoProtocol> _boyFriend;}- (id)boyFriend;- (void)setBoyFriend:(id<DoProtocol>)boyFriend;- (void)makeMoney;- (void)doHomework;- (instancetype)initWithName:(NSString *)name;- (void)setName:(NSString *)name;- (NSString *)name;@end
#import "Girl.h"@implementation Girl- (instancetype)initWithName:(NSString *)name{ if (self = [super init]){ _name = name; } return self;}- (void)setName:(NSString *)name{ _name = name;}- (NSString *)name{ return _name;}- (id)boyFriend{ return _boyFriend;}- (void)setBoyFriend:(id<DoProtocol>)boyFriend{ _boyFriend = boyFriend;}- (void)makeMoney{ [_boyFriend makeMoney];}- (void)doHomework{ [_boyFriend doHomework];}@end
一个遵守协议的Boy类
#import <Foundation/Foundation.h>#import "DoProtocol.h"@interface Boy : NSObject <DoProtocol>{ NSString *_name;}- (instancetype)initWithName:(NSString *)name;- (void)setName:(NSString *)name;- (NSString *)name;- (void)makeMoney;- (void)doHomework;@end
#import "Boy.h"@implementation Boy- (instancetype)initWithName:(NSString *)name{ if (self = [super init]){ _name = name; } return self;}- (void)setName:(NSString *)name{ _name = name;}- (NSString *)name{ return _name;}- (void)makeMoney{ NSLog(@"%@ Make Money...",_name);}- (void)doHomework{ NSLog(@"%@ Do Homework...",_name);}@endmain方法中调用
Girl *g = [[Girl alloc]initWithName:@"小花"]; Boy *boy = [[Boy alloc]initWithName:@"小柱"]; [g setBoyFriend:boy]; [g makeMoney]; [g doHomework];
输出结果
2015-01-17 19:41:26.219 OC0116[3355:303] 小柱 Make Money...2015-01-17 19:41:26.219 OC0116[3355:303] 小柱 Do Homework...
0 0
- OC高级(二)
- OC高级(一)
- OC语言(二)
- OC语言(二)
- OC基础(二)
- IOS-OC之高级组件PickerView之二
- IOS-OC之高级控件TableView之二
- js高级(二)
- java高级(二)
- OC学习总结(二)
- OC核心语法(二)
- OC学习总结(二)
- OC + Swift 混编(二)
- OC (二)
- OC高级内存管理
- OC 内存高级管理
- OC高级面试
- OC内存管理高级
- 《Linux高性能服务器编程》学习笔记——第五章 Linux网络编程基础API(4)
- linux中的IIC设备驱动
- Java NIO框架Netty教程(三) 字符串消息收发
- ZooKeeper应用场景介绍
- 2015-1-16完成任务
- OC高级(二)
- C#单独获取系统的年,月,小时,分钟,秒
- Java集合类详解1
- PS画扇形
- 10 examples to help you understand top command usage in Unix/Linux
- 学会提问 笔记(一)
- Foj 1147 Tiling[ dp+高精度 ]
- 二分图最大匹配-增广路-hdu2063-过山车
- extern C作用总结