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);}@end
main方法中调用

    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
原创粉丝点击