objective-C学习笔记(六):OC之block和protocol

一、Block代码块

       代码块的本质与其他变量类似,但是代码块存储的是一个函数体。

       首先我们要知道block代码块的语法标记:脱字符(^)

       1.Block代码块的写法与C语言中指向函数的指针很相似

          1>Block示例:

             

            运行结果:

             

          2>指向函数的指针示例

             

             运行结果:

             

       2.block的一些情况:

         1>没有参数和返回值时:

            void (^myblock)=^{  /*函数体*/  };

         2>有返回值和多个参数时:(一个参数上面的例子已经讲了)

            void (^myblock)(int,int)=^(int num1,int num2){  /*函数体*/  }; 

            是不是很像指向函数的指针~

         3>代码块中的全局变量和局部变量:

            ①全局变量

                

                可以看到在block可以使用和改变全局变量

            ②局部变量

                在第一个例子中我们看到局部变量a是可以使用的,但是我试着在block中改变一下a的值,运行:

              

               可以看到报错了,所以在block中局部变量可以使用,但不可以改变它的值

               但是如何解决这个问题呢?只需要在局部变量前加上关键字__block:

               

               运行结果:

               

        4>block代码块的递归调用

            

           运行结果:

           

           注意:代码块变量必须是静态变量或者全局变量

           后面讲到集合的时候,还要谈到利用block代码块遍历集合,这里就不多说了。


二、protocol(协议)

      1.协议的概念:

         1>协议声明了可以被任何类实现的方法

         2>协议不是类,它定义了一个其他对象可以实现的接口

         3>如果在某个类中实现了协议的某个方法,也就代表这个类实现了那个协议

         4>协议经常用来委托对象,一个委托对象是一种用来协同或者代表其他对象的特殊对象

         5>委托,就是调用自己定义方法,别的类来实现

     2.这里介绍两个关键字

        1>@optional  可以选择实现的方法

        2>@required   必须强制实现的方法

        注意:虽然协议中声明的方法默认是要强制实现的,但是开发中我们最好不要省略@required,便于合作的人理解

     3.完整的创建一个协议

        1>创建一个命令行项目,new file

          

        2>选择OS X下Source中的Objective-C File

          

        3>在File Type里选择protocol ,并取好名字,选择好要继承的类,这里我没有创建类所以继承NSObject

          

        4>完成

          

         5>示例:

            ①MyProtocol.h

            

            注意:@optional下的方法可以实现也可以不实现,@required下的方法必须实现,否则会报错

            ②Number.h

            

            注意:导入协议时,首先要在类的.h文件中improt协议的文件(其实最好的方法是跟@class类似,利用@protocol关键字,告诉编译器这是一个协议),之后在父类旁边添加<协议名>

            ③Number.m

            

            注意:。。好像没什么要注意的

            ④main.m

            

            注意:。。好像还是没什么要注意的

            ⑤运行结果

              

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值