IOS之学习笔记二(块)

简介: IOS之学习笔记二(块)

1、逗号表达式,返回整个逗号表达式的返回值是最后一个表达式的返回值,长见识了,第一次听说,比如


  int x = (a = 3, a = 4, a = 5, a = 6);

  NSLog(@"x is %d", x);x is 6


2、iOS 有如下三种随机数方法:


   1)、srand((unsigned)time(0)); //不加这句每次产生的随机数不变

   int i = rand() % 5;

   2)、srandom(time(0));

   int i = random() % 5;

   3)、int i = arc4random() % 5 ;


注:rand()和random()实际并不是一个真正的伪随机数发生器,在使用之前需要先初始化随机种子,否则每次生成的随机数一样。

arc4random() 是一个真正的伪随机算法,不需要生成随机种子,因为第一次调用的时候就会自动生成。而且范围是rand()的两倍。在iPhone中,RAND_MAX是0x7fffffff (2147483647),而arc4random()返回的最大值则是 0x100000000 (4294967296)。

精确度比较:arc4random() > random() > rand()。


3、块的基本用法,定义如下

  ^[块返回值类型](形参类型1 形参1 形参类型2 形参2)

  {

   //块执行体

  }  

  1)、定义块必须以^开头

  2)、定义块返回值类型一般省略

  3)、定义块不需要值名字

  4)、块的参数可以是(void)


  块变量格式

  块返回值类型(^块变量名)(形参类型1, 形参类型2);

  一般使用


  #import <Foundation/Foundation.h>

 

  int main(int argc, char * argv[]) {

       @autoreleasepool {

       void (^printStr)(void) = ^(void) {

               NSLog(@"我在学习oc的块");

       };

           printStr();

           int (^sum)(int, int) = ^(int a, int b) {

           return a + b;

       };

           NSLog(@"sum is %d", sum(a, b));

           void (^print)(NSString) =  ^(NSString *info) {

           NSLog(@"info value is %@", info);

       };

           print(@"chenyu");

       }

  }


块可以访问局部变量的值,但是不许修改,因为传递进去的是值,不是地址,所以不能修改,following

  下面代码会引起错误


int value = 20;

  void (^print)(void) = ^(void) {

      value = 30;

      NSLog(@"%d", value);

  }

  value = 45;

  print();


  看下面的例子


 int value = 20;
   void (^print)(void) = ^(void) {
       NSLog(@"%d", value);
   }
   value = 45;
   print();

 结果打印是20,我们不是修改了成了45吗?当程序用块访问局部变量时,系统在定义块会把局部变量的值保存在块中,而不是等到执行时才去访问获取变量的值,如果考虑块要

修改局部变量的值,我们可以用_block修饰局部变量


_block  int value = 20;
   void (^print)(void) = ^(void) {
       //会打印出45
       NSLog(@"%d", value);
       value = 40;
       //会打印出40
       NSLog(@"%d", value);
   }
   value = 45;
   print();
   //会打印出40
   NSLog(@"%d", value);


用_block作为修饰的时候可以理解为传递指针到块里面去了,可以修改地址从而修改值

 用typedef定义块变量类型,格式如下

  typedef 块返回值类型 (^块变量类型)(形参类型1, 形参类型2)


  typedef void (^Print)(NSString *);


  Print print = ^(NSString *info)

  {

      NSLog(@"%@info", info);

  }

  print(@"chenyu");


块有点像C语言里面的函数指针。

 

测试:

typedef int (^Add) (int, int);
typedef void (^Show) (NSString *);
int main(int argc, char * argv[]) {
    @autoreleasepool {
        void (^pri)(void) = ^(void) {
            NSLog(@"hello world");
        };
        pri();
        Add add =  ^(int a, int b) {
            return a + b;
        };
        int result = add(4, 5);
        NSLog(@"4 + 5 is: %d", result);
        Show show = ^(NSString * info) {
            NSLog(@"%@", info);
        };
        show(@"chenyu");
    }
}

结果:

hello world
4 + 5 is: 9
chenyu


相关文章
|
自然语言处理 开发工具 Swift
移动用户反馈-iOS接入指南 | 学习笔记
快速学习移动用户反馈-iOS接入指南
移动用户反馈-iOS接入指南 | 学习笔记
|
小程序 前端开发 Shell
接入 mPaaS 小程序并实现启动 iOS 版| 学习笔记
快速学习接入 mPaaS 小程序并实现启动 iOS 版。
接入 mPaaS 小程序并实现启动 iOS 版| 学习笔记
|
移动开发 小程序 前端开发
iOS 端自定义开发(二)| 学习笔记
快速学习 iOS 端自定义开发。
iOS 端自定义开发(二)| 学习笔记
|
移动开发 JSON 小程序
iOS 端自定义开发(一)| 学习笔记
快速学习 iOS 端自定义开发。
iOS 端自定义开发(一)| 学习笔记
|
小程序 IDE API
iOS 端预览和调试小程序| 学习笔记
快速学习 iOS 端预览和调试小程序。
iOS 端预览和调试小程序| 学习笔记
|
小程序 Shell 开发工具
接入 mpaas 小程序并实现启动 IOS 版|学习笔记
快速学习接入 mpaas 小程序并实现启动 IOS 版
271 0
接入 mpaas 小程序并实现启动 IOS 版|学习笔记
|
移动开发 JSON 小程序
iOS 端自定义开发(一)|学习笔记
快速学习iOS 端自定义开发(一)
207 0
iOS 端自定义开发(一)|学习笔记
|
小程序 IDE API
IOS 端预览和调试小程序|学习笔记
快速学习 IOS 端预览和调试小程序
183 0
IOS 端预览和调试小程序|学习笔记
|
API 开发工具 iOS开发
iOS 接入指南|学习笔记
快速学习 iOS 接入指南|
255 0
iOS 接入指南|学习笔记
|
测试技术 数据安全/隐私保护 Android开发
提交 iOS 测试任务|学习笔记
快速学习 提交 iOS 测试任务
106 0
提交 iOS 测试任务|学习笔记

热门文章

最新文章

  • 1
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
  • 2
    iOS|解决 setBrightness 调节屏幕亮度不生效的问题
  • 3
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 4
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 5
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 6
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
  • 7
    iOS各个证书生成细节
  • 8
    uniapp云打包ios应用证书的获取方法,生成指南
  • 9
    iOS|记一名 iOS 开发新手的前两次 App 审核经历
  • 10
    【iOS 开发】初识函数式 Swift 实用
  • 1
    uniapp云打包ios应用证书的获取方法,生成指南
    28
  • 2
    iOS|解决 setBrightness 调节屏幕亮度不生效的问题
    117
  • 3
    iOS|记一名 iOS 开发新手的前两次 App 审核经历
    20
  • 4
    iOS各个证书生成细节
    36
  • 5
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    161
  • 6
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    55
  • 7
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    73
  • 8
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    54
  • 9
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    65
  • 10
    uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
    172