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.优先级最高可能覆盖
- 015.8.3 第八堂 用block实现租房+category类别
- 好用的类别Category
- category 类别
- 类别category
- 类别---category
- Category(类别)
- Category 类别 -Objective-C
- 也说类别Category
- Category 类别 -Objective-C
- category(类别)一则实例
- ios 类别(category)
- Category 类别 -Objective-C
- Category 类别 知识点整理
- 11.5 、类别 Category
- Category 类别 -Objective-C
- Category 类别 -Objective-C
- OC Category(类别)
- 类别(Category)
- Xcode 升级后,常常遇到的遇到的警告、错误,解决方法
- Poj 2287 田忌赛马解题详解(贪心思想)
- 利用 Tinyproxy 搭建 HTTP(S) 代理
- SQL删除重复的数据
- 来讲讲Git这个玩意到底该怎么用?
- 015.8.3 第八堂 用block实现租房+category类别
- 解决Eclipse发布webproject, jar无法发布到tomcat lib目录下的问题
- 兔子--Service的生命周期
- windows 7 修改samba共享时保存的用户名和密码
- jQuery AJAX
- android4.4.4睡眠唤醒软件架构
- cocos2d-js中监听帧事件时不要忘了this
- poi-单元格是公式
- java 与 C/C++ 高字节 低字节的区别