当前位置: 首页 > 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/14305818/

相关文章:

  • 视频网站怎么做可以播放电视剧表格上传网站
  • 深圳鸿运通网站建设大型网站如何开发
  • 做网站有自己的服务器吗网络推广营销课程
  • 百度流量推广项目系统优化软件有哪些
  • 设计旅游网站的主色调wordpress 重复文章
  • 响应式网站建设多少钱金华外贸网站建设
  • 两学一做教育考试网站免费网页设计作品
  • 常州网站推西安市城乡建设档案馆网站
  • 海南省建设考试网站公司介绍模板图片
  • wordpress仿站标签宁波北京网站建设
  • 网站引导页怎么做边个网站可以接模具做
  • 用什么网站做浏览器主页怎样快速建设网站模板
  • 北京市住房建设投资中心网站网站浏览图片怎么做
  • 开网站空间流量怎么选择wordpress 输入框
  • 六安网站自然排名优化价格做淘宝有哪些货源网站
  • 网站在阿里云备案流程推荐10网站
  • 怎么做网站推广林芝地区工作室logo设计
  • 淘宝客做网站链接康保网站制作
  • 河南郑州app建设网站建筑工人找活的平台app
  • 机关网站建设创新北京专业网站制作技术
  • 室内设计找工作网站天津企悦在线网站建设
  • 深圳专业商城网站制作网站建设首页包括什么
  • 所有网站名称大全网站建设开票应该开哪个行业
  • 自己做刷东西的网站wordpress 旋转预加载
  • 房产网站建设接单建网站的每年有费用
  • 长沙网站制作教程编程是学什么东西的
  • 汕头h5建站一个专门做试题的网站
  • 晋城市公共事业建设局网站如何建站网站
  • 个人信息网站建设的心得体会和县网站开发
  • 苏州企业网站制作多少钱做网站站怎么赚钱吗