015.8.3 第八堂 用block实现租房+category类别

来源:互联网 发布:魔法古堡 桌游淘宝 编辑:程序博客网 时间:2024/06/10 01:09
////  main.m//  Block-rentHouse////  Created by tusm on 15-9-10.//  Copyright (c) 2015年 tusm. All rights reserved.//#import <Foundation/Foundation.h>#import "Person.h"int main(int argc, const char * argv[]){    @autoreleasepool {        Person *jack=[[Person alloc]init];        [jack needOneHouse];    }    return 0;}

////  Person.h//  Block-rentHouse////  Created by tusm on 15-9-10.//  Copyright (c) 2015年 tusm. All rights reserved.//#import <Foundation/Foundation.h>@interface Person : NSObject-(void)needOneHouse;@end
////  Person.m//  Block-rentHouse////  Created by tusm on 15-9-10.//  Copyright (c) 2015年 tusm. All rights reserved.//#import "Person.h"#import "Agency.h"@implementation Person-(void)needOneHouse{    Agency *xiaowang=[[Agency alloc]init];    [xiaowang rentHouseWithBlock:^(NSString *results) {        NSLog(@"回调完毕,顾客感觉还不错");    }];    //将定义和实现聚合在一起}@end
////  Agency.h//  Block-rentHouse////  Created by tusm on 15-9-10.//  Copyright (c) 2015年 tusm. All rights reserved.//#import <Foundation/Foundation.h>/* 之前我们的做法 protocol代理 定义id类型对象发起事情  调用delegeate里某一方法 */typedef void(^ComplishBlock)(NSString *results);//回调@interface Agency : NSObject-(void)rentHouseWithBlock:(ComplishBlock)block;//定义个事件,接收个block@end
////  Agency.m//  Block-rentHouse////  Created by tusm on 15-9-10.//  Copyright (c) 2015年 tusm. All rights reserved.//#import "Agency.h"@interface Agency()@property (nonatomic,copy)ComplishBlock block;@end@implementation Agency-(void)rentHouseWithBlock:(ComplishBlock)block{    //保存    self.block=block;    NSLog(@"马上出发");    NSLog(@"找到房源");        //回调数据    self.block(@"希尔顿大酒店999号");}@end


category类别




一、用类别和继承分别实现添加方法 (www.baidu.com字符串生成)


如图所示的继承:

         继承:新建一个类,继承NSString,给这个类添加方法。

         类别:在现有类(1.个人创建的2.系统类库)的基础上添加新的方法,不会创建一个新的类*/


    //按照一定的格式创建成一个字符串的对象并返回回去  StringWithFormat方法

    return [NSStringstringWithFormat:@"www.%@.com",keyWord];


//NSString ->  基类 需要在哪个类上面添加新的方法

//URLString -> 类目(别名) 给添加的这套方法取一个名字

        //对于东哥所讲的:类目比继承更强大在于,不必建立新的类,而继承的新类需要alloc init 占用更多内存。

        //类方法的话,没有实例化都不占空间。实例化方法的,NSString仍需要allocinit新的对象

        //何来内存多少之说?

        //呃呃呃 保留意见


二、一个地方声明多个地方实现(年龄的不同场景)

         类别是一种为现有的类添加新方法的方式

         利用OC的动态运行时分配机制,category提供了一种比继承更为简洁的方法来对class进行扩展,

         在不改变现有类的基础上,同时无需创建现有类的子类,就能实现现有类添加新方法。

         可以为任何已经存在的class添加方法,包括那些没有源代码的类。(如某些框架类 NSString


关于类别的作用:

关于图解一处声明多处实现:(在实际项目中多用此来分配任务(架构师))


在同一个地方Person声明,在其他类.m文件中分散实现。实现了第二个功能(将类的实现分散到多个不同文件或不同框架中,方便代码管理。也可以对框架提供类的扩展)。


例如:

在Person.h文件中

//第一种场景(种类)@interface Person (Family) //类别Family- (int)ageInFamily; //需要的时候才实现@end


在Family.m文件中

@implementation Family-(void)show{    NSLog(@"ageInFamily:%d",[self ageInFamily]);}@end//实现@implementation Person (Family)-(int)ageInFamily{    return 30;}@end
在main.m中

        Family *f=[Family new];        [f show];

其他同理。

三、类别的前向引用及局限性

@interface Text : NSObject//-(void)ddd;//警报@end@interface Text (TextName)-(void)doSomething;//定义一个声明不去实现,也不会报错@end//类别也有局限性见图//我们对类别的常用方式:给已有的类添加新方法

即,1.不能添加实例变量 2.优先级最高可能覆盖



0 0
原创粉丝点击