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) {//会打印出45NSLog(@"%d", value);value = 40;//会打印出40NSLog(@"%d", value);}value = 45;print();//会打印出40NSLog(@"%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 world4 + 5 is: 9chenyu

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/289682.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# ReaderWriterLockSlim类

为了使锁定机制允许锁定多个读取器(而不是一个写入器)访问某个资源&#xff0c;可以使用 ReaderWriterLockSlim 类。这个类提供了一个锁定功能&#xff0c;如果没有写入器锁定资源&#xff0c;就允许多个读取器访问资源&#xff0c;但只能有一个写入器锁定该资源。ReaderWriter…

LOG4NET用法

log 4net组件下载:log4net.dll web.config配置如下&#xff1a; <?xml version"1.0" encoding"utf-8" ?> <configuration><configSections><section name"log4net" type"log4net.Config.Log4NetConfigurationSectio…

C# dataGridView控件实用属性及事件总结

一、属性 1.控制时间字段只显示“年-月-日”:dataGridView1.Columns[10].DefaultCellStyle.Format = "yyyy-MM-dd"; 2.背景颜色:dataGridView1.BackgroundColor = Color.Red; 3.列宽随内容自动调整:dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColu…

oracle log.xml分析,Oracle11g 中使用ADRCI 查看alert log文件(xml格式)

Automatic Diagnostic Repository (ADR)存放数据库诊断日志、跟踪文件的目录&#xff0c;称作ADR base&#xff0c;对应初始化参数diagnostic_dest。 如果设置了ORACLE_BASE环境变量&#xff0c;DIAGNOSTIC_DEST等于ORACLE_BASE&#xff0c;如果没有设置ORACLE_BASE&#xff0c…

怎么计算信息完整度_德阳冻货运镖怎么计算费用

德阳冻货运镖怎么计算费用物流”一词我们并不陌生&#xff0c;它把小到零食玩具、大到家用电器&#xff0c;一一送到我们手中&#xff0c;但传统的物流运输模式只能满足部分物品的运输要求。随着人们的生活品质不断提高、消费不断升级。德阳冻货运镖怎么计算费用息平台的支撑&a…

AI+时代,谈谈产品经理对图像识别技术的阈值控制

产品满足用户的需求有一个阈值&#xff0c;产品值低于阈值用户会觉得了无生趣&#xff0c;即产品一般般&#xff0c;也即产品经理做了功能经理。产品值等于阈值产品功能基本满足了用户的需求&#xff0c;而只有产品经理驾驭了需求&#xff0c;把产品做成作品&#xff0c;产品值…

利用html5看雪花飘落的效果

html5飘落的雪花堆积动画特效 <!DOCTYPE html> <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <title>下雪了&#xff0c;我们去堆雪人好吗&#xff1f; </title><base targe…

【亲身经验】如何在 6 个月内成为“微软 MVP”

前言很荣幸&#xff0c;在愚人节这天&#x1f601;&#xff0c;收到了获得“微软 MVP”奖项的通知&#xff1a;由于该奖项评选标准只涉及 2021 年所做的贡献&#xff0c;而我的贡献主要是公众号文章。因此以我从 2021/06 开始运营个人公众号算起&#xff0c;可以说&#xff0c;…

从listView1中选择记录到listView2中

1.自定义Worker字段类 public class SelectWorker{public int WorkerID;public string WkName;} 2.定义全局变量 List<SelectWorker> wkList0 = new List<SelectWorker>();List<SelectWorker> wkList1 = new List<SelectWorker>();List<SelectWorke…

3500个常用汉字表_小学常用560个汉字笔画笔顺表,打印下来,小学六年慢慢练...

温馨提示公众号改版后很多孩子及家长朋友找不到我们了为了方便大家更快地找到我们获取更多学习工具和资料您可以按照下面的方式 星标或置顶我们☟ ☟ ☟小学阶段&#xff0c;字写得好很重要&#xff0c;笔顺写对了也很重要。写对笔顺有利于把字写得美观&#xff0c;考试时碰到笔…

java之wait()、notify()实现非阻塞的生产者和消费者

一、对于wait()和notify()的解释 void notify()Wakes up a single thread that is waiting on this object’s monitor.唤醒等待获取锁资源的单个线程void notifyAll()Wakes up all threads that are waiting on this object’s monitor.唤醒等待获取锁资源的所有线程void wait…

大数据先行 传统金融转型需从体制上创新

经过几年发展&#xff0c;互联网金融成为金融行业一股鲜活的力量。同时&#xff0c;行业也意识到&#xff0c;这条鲶鱼不会在大众市场对银行构成威胁。日前&#xff0c;德勤的一份报告也指出&#xff0c;P2P的市场价值高达1800亿美元&#xff0c;但并没有在成本、风险和速度上对…

oracle存档模式,Oracle的备份和存档模式

Oracle的备份和存档模式在做硬件升级前必须要将数据库做一次全备份&#xff0c;以便在出现不可预料的情况下进行恢复&#xff0c;全备份的方法有多种&#xff0c;以下列举两种简单高效的逻辑备份和冷备份&#xff0c;在数据库可以宕机的条件下&#xff0c;推荐使用冷备份&#…

SVN安装和使用总结

SVN简介&#xff1a; 为什么要使用SVN&#xff1f; 程序员在编写程序的过程中&#xff0c;每个程序员都会生成很多不同的版本&#xff0c;这就需要程序员有效的管理代码&#xff0c;在需要的时候可以迅速&#xff0c;准确取出相应的版本。 Subversion是什么&#xff1f; 它是一…

从部署 httpd 入手,理清 k8s 配置中的 containerPort、port、nodePort、targetPort

注&#xff1a;文中各种内网、公网 IP 仅为示例&#xff0c;不保证所有 IP 都可以访问&#xff0c;且你的环境中 IP 可能不同。背景在上一篇文章 自己搭建一个k8s环境 中&#xff0c;我们一顿操作猛如虎&#xff0c;搭建出了由 1 个 master 和 1 个 worker 节点组成的 k8s 集群…

C#正则表达式判断输入的是不是数字

1.函数 public static bool IsFloat(string str){string regextext "^(-?\d)(\.\d)?$";Regex regex new Regex(regextext, RegexOptions.None);return regex.IsMatch(str.Trim());} 2.调用if (!IsFloat(textBox11.Text)){MessageBox.Show("应该是一个数字&q…

分享几个拉钩网的前端页面

http://c.lagou.com/allMarch/warmup/index.html?fromsinglemessage&isappinstalled0 http://c.lagou.com/careerism/invitation.html?fromgroupmessage&amp;isappinstalled0&scene4转载于:https://blog.51cto.com/snaile/1616398

Andorid之用ConditionVariable实现线程同步

一、学习ConditionVariable之前的复习 如果你不懂wait()、notify()怎么使用&#xff0c;最好先复习下我之前的这篇博客&#xff0c;怎么使用wait()、notify()实现生产者和消费者的关系 java之wait()、notify()实现非阻塞的生产者和消费者 二、看下ConditionVariable源代码实现…

360文件粉碎机_中山三乡资料文件销毁粉碎销毁资料文件公司一览表

中山三乡资料文件销毁粉碎销毁资料文件公司一览表安排搬运工作人员及运输车辆上门收取销毁物品&#xff0c;将需销毁的物品装上运输车辆&#xff0c;并进行拍照、车箱粘贴封条等工作。第五步&#xff1a;客户可安排工作人员&#xff0c;跟我公司销毁运输车辆一同前往我公司销毁…