2015-12-04// OC_9 类的扩展
//
// main.m
// OC_9 类的扩展
//
// Created by YIem on 15/12/4.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//
import <Foundation/Foundation.h>
import "Gril.h"
import "NSString+SayHi.h"
import "Man.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// 创建对象
Gril *bg = [ Gril grilWithYanzhi:@"漂亮" tui:@"大长腿"];
// 类中方法
[bg zipai];
// 类目方法
[bg findBoyFriend];
// 创建字符串
NSString *str = @"随便";
//调用字符串类目方法
[str sayHi];
/**
* 类目的作用 扩展
* 1.给系统的类(没有源代码的类/没有.m文件的类)添加新的方法
* 2.任何一个类都可以添加类目
* 3.使用类目名 划分方法种类
*/
/*-----------------<<<<<.0.>>>>>-------------*/
/**
* 类目的特点
* 1.有一对.h和.m文件
* 2.可以写在类的后面 或者 新建文件(类名 + 类目名)
* 3.类目中的方法相当于添加在原类中 可以使用任意的成员变量和方法
* 4.类目在不能添加成员变量 只能添加方法
* 5.类目在的方法优先级更高 如果和原类方法重名 回覆盖原方法(尽量避免重名)
**/
// 创建对象
Man *dawa = [[Man alloc] init];
[dawa shuangFangLianJie];
}
return 0;
}
//
// Gril.h
// OC_9 类的扩展
//
// Created by YIem on 15/12/4.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//
import <Foundation/Foundation.h>
@interface Gril : NSObject
@property (nonatomic, copy)
NSString *yanzhi;
@property (nonatomic, copy)
NSString *tui;
// 自定义初始化
(instancetype)initWithYanzhi:(NSString *)yanzhi
tui:(NSString *)tui;
// 遍历构造器
(instancetype)grilWithYanzhi:(NSString *)yanzhi
tui:(NSString *)tui;
/// 自拍
- (void)zipai;
@end
// 类目 / 类别/ 分类 Category
// 关键字 类名 (类目名)
@interface Gril (BF)
// 类目中不能添加成员变量 只能添加方法
- (void)findBoyFriend;
- (void)zipai;
@end
//
// Gril.m
// OC_9 类的扩展
//
// Created by YIem on 15/12/4.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//
import "Gril.h"
// 延展/扩展 Extension
// 作用: 私有声明 管理私有的内容
// 关键字 类名 ()
@interface Gril ()
@property (nonatomic, copy)
NSString *name;
// 私有方法 -> 没有在.h声明的方法 称为私有方法
// 私有方法可以在延展中声明,或者不声明
// 如果声明 可以统一管理所有的私有方法
- (void)prvalateMethod;
@end
@implementation Gril
pragma mark - dealloc
(void)dealloc
{[_yanzhi release]; [_tui release]; [super dealloc];
}
pragma mark - 自定义初始化
(instancetype)initWithYanzhi:(NSString )yanzhi tui:(NSString )tui
{
if (self) {self = [super init]; self.yanzhi = yanzhi; self.tui = tui;
}
return self;
}
pragma mark - 遍历构造器
- (instancetype)grilWithYanzhi:(NSString )yanzhi tui:(NSString )tui
{
Gril *p = [[Gril alloc] initWithYanzhi:yanzhi tui:tui];
return [p autorelease];
}
pragma mark - 普通方法
(void)zipai
{NSLog(@"自拍");
}
// 扩展/延展
(void)prvalateMethod
{NSLog(@"私有方法");
}
@end
// 类目的实现
@implementation Gril (BF)
(void)findBoyFriend
{// 类目中可以使用当前类的任意方法和成员变量 NSLog(@"找男朋友");
}
// 类目中方法优先级高于原类方法
// 当方法重名时 回覆盖原类方法
(void)zipai
{NSLog(@"和男朋友自拍");
}
@end
//
// FruitDelegate.h
// OC_9 类的扩展
//
// Created by YIem on 15/12/4.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//
import <Foundation/Foundation.h>
// 正式协议
// 声明若干个方法(一套标准)
// 关键字 协议名 根协议
@protocol FruitDelegate <NSObject>
// 协议类型修饰
// 必须的 表示必须实现的方法 加required
@required
// 有价值
- (void)hasVslue;
// 可选的 可实现可不实现 optional
@optional
// 使人愉悦
- (void)makeSomeoneHappy;
@end
//
// Liulain.h
// OC_9 类的扩展
//
// Created by YIem on 15/12/4.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//
import <Foundation/Foundation.h>
import "FruitDelegate.h"
// 签订协议 -> 具有了协议中的方法的声明
@interface Liulain : NSObject <FruitDelegate>
@end
//
// Liulain.m
// OC_9 类的扩展
//
// Created by YIem on 15/12/4.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//
import "Liulain.h"
@implementation Liulain
(void)hasVslue
{NSLog(@"有价值");
}
@end
//
// Money.h
// OC_9 类的扩展
//
// Created by YIem on 15/12/4.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//
import <Foundation/Foundation.h>
import "FruitDelegate.h"
@interface Money : NSObject<FruitDelegate>
@end
//
// Money.m
// OC_9 类的扩展
//
// Created by YIem on 15/12/4.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//
import "Money.h"
@implementation Money
(void)hasVslue
{NSLog(@"钱钱钱");
}
(void)makeSomeoneHappy
{NSLog(@"买买买");
}
@end
//
// Man.h
// OC_9 类的扩展
//
// Created by YIem on 15/12/4.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//
import <Foundation/Foundation.h>
import "Woman.h"
warning 代理模式4. 签订协议
@interface Man : NSObject <MarriageDelegate>
- (void)shuangFangLianJie;
@end
//
// Man.m
// OC_9 类的扩展
//
// Created by YIem on 15/12/4.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//
import "Man.h"
@implementation Man
(void)shuangFangLianJie
{Woman *shejing = [[Woman alloc] init];
warning 代理模式5. 设置代理人
shejing.delegate = self;
[shejing buybuybuy];
}
warning 代理模式6. 实现协议中声明的方法
(void)makeMoney
{NSLog(@"卖肾");
}
@end
//
// Woman.h
// OC_9 类的扩展
//
// Created by YIem on 15/12/4.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//
import <Foundation/Foundation.h>
warning 代理模式1. 声明协议
// 非正式协议
@protocol MarriageDelegate <NSObject>
// 必须
@required
// 挣钱
- (void)makeMoney;
- (void)mustBeHuluwa;
- (void)mustHasGrandPa;
- (void)mustBeBigBrother;
// 加分项
@optional
- (void)touShangYouDianLv;
- (void)geBiYouLaoWang;
@end
@interface Woman : NSObject
warning 代理模式2. 设置代理人属性
// 给签订协议的对象 设置一个角色 未婚夫
@property (nonatomic, assign) id <MarriageDelegate> delegate;
- (void)buybuybuy;
@end
//
// Woman.m
// OC_9 类的扩展
//
// Created by YIem on 15/12/4.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//
import "Woman.h"
@implementation Woman
-(void)buybuybuy
{
warning 代理模式3. 让代理人调用协议方法
// 让未婚夫挣钱 自己买买买
[self.delegate makeMoney];
NSLog(@"买买买");
}
@end
//
// NSString+SayHi.h
// OC_9 类的扩展
//
// Created by YIem on 15/12/4.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//
import <Foundation/Foundation.h>
@interface NSString (SayHi)
- (void)sayHi;
@end
//
// NSString+SayHi.m
// OC_9 类的扩展
//
// Created by YIem on 15/12/4.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//
import "NSString+SayHi.h"
@implementation NSString (SayHi)
(void)sayHi
{NSLog(@"Hello, World");
}
@end