个人理解
1.
代理的设置 :
一般是创建一个界面,想要实现和另一个界面的交互传值
本界面的事件的处理交给代理,让代理去响应
2.
当使用MVC时
1.协议代理的定义写在View.h中
2.所以当创建界面时就应该指定代理要实现哪些方法,这部分写在view.m中,对事件的相应方法中如button点击
- (void)btnClick:(UIButton *)button
if (self.delegate && [self.delegate respondsToSelector:@selector(协议方法)]) {
[self.delegate (协议方法):(本界面需要传递的参数或对象)];
}
3.代理的对象都是controller,在controller中初始化view对象后,指定view的代理是本控制器,再把响应的实现都写在contorller中
view.delegate=self;
4.而以后当使用到网络传值时就需要在view中写用数据model初始化函数,过程如下:
controller中获取数据封装成model
初始化view.init
指定代理
调用view.createUI(model)初始化界面
3.block
函数回调 当block执行时就会回到这里,哪里调用,最后就回到哪里
就是去其他地方获取一些东西,再带回来
block在创建的时候,它的内存是分配在栈(stack)上,而不是在堆(heap)上。
他本身的作于域是属于创建时候的作用域,一旦在创建时候的作用域外面调用block将导致程序崩溃
创建完block的时候需要调用copy的方法。copy会把block从栈上移动到堆上,那么就可以在其他地方使用这个block了
_block = ^(){ NSLog(@"number %d", number); }; _block = [_block copy];
block的释放又需要等self的dealloc中才会释放
_ _block标记的变量是不会被自动retain的。
_ _block ViewController *controller = self;
_block = ^()
{
NSLog(@"string %@", controller->_string);
};
( void (^) (void) )finishBlock
第一个void表示此block无返回值。
(^)为block type的标志。
第二个(void)表示这个block无参数。
finishBlock就是他的名字。
无参数无返回类型的匿名函数就是我们的最简单的block了!
没有返回值,没有参数,就相当于只有内部的可执行代码!
4.
点语法和KVC有以下几点共同点:
• 都属于拼写技术
• 都适用于(也只适用于)访问属性
• 两者都会使用.作为语法组成的一部分
不同点:
• KVC是一种机制,影响到应用的对象设计模式以及其他Objective-C的使用
• 点语法只是存取方法的一种快捷形式,是一种语法
• 使用KVC访问属性时,可能会会调用属性的存取方法,也可能会直接访问属性的实例变量
• 使用点语法就是在使用属性的存取方法
• KVC可以使用多个点来表示一个键路径,如[myInstance setValue:@2 forKeyPath:@"linkedInstance.integerProperty"];
• 点语法使用多个点来连环调用存取方法,如myInstance.linkedInstance.integerProperty = 2;