个人理解

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;

原文地址:https://www.cnblogs.com/guaishushu/p/4979081.html