当前位置: 首页 > news >正文

站长工具下载app最好装修公司排名

站长工具下载app,最好装修公司排名,郑州软件开发外包,广州做网站需要多少钱本文主要是阐述一下Block中如何的使用外部变量以及block本身的内存管理。 先定义一个block变量#xff0c;作为后续的例子中使用#xff1a; typedef void(^BlockCC)(void); BlockCC _block; 1、block中引用外部变量 block中可以直接使用外部的变量#xff0c;比如 int num…本文主要是阐述一下Block中如何的使用外部变量以及block本身的内存管理。 先定义一个block变量作为后续的例子中使用 typedef void(^BlockCC)(void); BlockCC _block;  1、block中引用外部变量 block中可以直接使用外部的变量比如 int number  1; _block  ^(){     NSLog(number %d, number); };  那么实际上在block生成的时候是会把number当做是常量变量编码到block当中。可以看到以下的代码block中的number值是不会发生变化的 int number  1; _block  ^(){     NSLog(number %d, number); }; number  2; _block();  则输出的值为 1而不是2。原因就是如上所说。 如果要在block中尝试改变外部变量的值则会报错的。对于这个问题的解决办法是引入__block标识符。将需要在block内部修改的变量标识为__block scope。更改后的代码如下 __block int number  1; _block  ^(){     number;     NSLog(number %d, number); };  而这个时候其实block外部的number和block内部的number指向了同一个值回到刚才的在外部改变block的例子它的输出结果将是2而不是1。有兴趣的可以自己写一个例子试试。 2、block自身的内存管理 block本身是像对象一样可以retain和release。但是block在创建的时候它的内存是分配在栈(stack)上而不是在堆(heap)上。他本身的作于域是属于创建时候的作用域一旦在创建时候的作用域外面调用block将导致程序崩溃。比如下面的例子。 我在view did load中创建了一个block - (void)viewDidLoad {     [superviewDidLoad];       int number  1;     _block  ^(){       NSLog(number %d, number); }; }  并且在一个按钮的事件中调用了这个block - (IBAction)testDidClick:(id)sender {     _block(); }  此时我按了按钮之后就会导致程序崩溃解决这个问题的方法就是在创建完block的时候需要调用copy的方法。copy会把block从栈上移动到堆上那么就可以在其他地方使用这个block了~ 修改代码如下 _block  ^(){     NSLog(number %d, number); };   _block  [_blockcopy];  同理特别需要注意的地方就是在把block放到集合类当中去的时候如果直接把生成的block放入到集合类中是无法在其他地方使用block必须要对block进行copy。不过代码看上去相对奇怪一些 [array addObject:[[^{     NSLog(hello!); } copy] autorelease]];  3、循环引用 这一点其实是在第一点的一个小的衍生。当在block内部使用成员变量的时候比如 interface ViewController : UIViewController {     NSString *_string; } end  在block创建中 _block  ^(){     NSLog(string %, _string); };  这里的_string相当于是self-_string那么block是会对内部的对象进行一次retain。也就是说self会被retain一次。当self释放的时候需要block释放后才会对self进行释放但是block的释放又需要等self的dealloc中才会释放。如此一来变形成了循环引用导致内存泄露。   修改方案是新建一个__block scope的局部变量并把self赋值给它而在block内部则使用这个局部变量来进行取值。因为__block标记的变量是不会被自动retain的。 __block ViewController *controller  self; _block  ^(){     NSLog(string %, controller-_string); };  先写到这里基本是我在用block时候碰 到的一些问题。需要更详细的解释可以看看《Adanced Mac OS X Programming》这本书推荐给大家。
http://www.hkea.cn/news/14333540/

相关文章:

  • 织梦网站怎么关闭手机模板海兴县建设工程招标信息网站
  • 万网网站流量域名怎么解析到服务器上
  • 湘潭网站建设 磐石网络在哪购物网站排名2015
  • 铭誉摄影网站深圳常桉网站建设
  • 江苏建设监理协会官方网站如何开启wordpress mu
  • 免费的建站平台关于企业网站开发与设计论文
  • wp网站建设中国网站的特点
  • 江苏网站推广公司哪家好网站规划的主要内容
  • 做动态图的网站查域名备案信息
  • 什么网站可以免费做视频软件做平台网站一般有php还是js
  • 平台网站做等级保护测评无锡 做公司网站
  • 吉首公司网站找谁做菜鸟建网站
  • seo建站优化推广云端网络网站
  • 网站tag页面如何做如何注册有限公司
  • 用手机建网站广告公司简介模板及介绍
  • 怎样免费建立个人网站自己做网站怎么样
  • 可以在哪个网站做封面赚钱新媒体一键发布平台
  • 做网站是互联网开发吗为什么做金融网站犯法
  • 做一个简单的公司网站要多少钱做网站赚广告
  • 游戏网站排行凡科快图官网登录入口
  • python购物网站开发流程商机加盟好项目
  • 上海专业做网站公司装饰网站模板下载
  • 购物网站开题报告班级手机网站墨刀怎样做
  • 锦州建设局网站app推广工作是做什么的
  • 网站域名查询工具网站建设解说词
  • 网站建设提供资料表宝安网站建设哪家便宜
  • php做的网站模版本溪北京网站建设
  • 网站服务器主机配置最好的网站开发工具
  • 宁波如何建网站怎么利用QQ空间给网站做排名
  • 万江仿做网站网站开发 合作协议