block的一些很基础的玩意

简介

虽然工作了很长时间了,之前也是从一个不相关的职业改行到iOS的开发;;一个人开发的过程很没意思(没人和你交流提升自然很慢)....写过的程序用起来还不错,满足了用户的需求,但是当被问及一些类似基础面试题,一些原理以及一些第三方的基本实现原理的时候,还是萌萌哒(主要是蒙圈了)

所以我决定"从新","从低"的学习iOS...

本文主要参考Cooper's Blog的文章,自己模仿写的,估计有很多的不足之处,希望大家可以指教, 想看深一层的请点击大神连接查看,这篇文章里说的都是我个人理解(偏于大白话),写这个主要是想让自己加深印象

这文章中提及的都是在ARC环境下测试的

1.Block在内存中的位置

  • 第一种类型
    屏幕快照 2015-08-31 下午7.21.14.png

    上面的代码打印出来的值是 <NSGlobalBlock: 0x100871090>
    由打印结果可以看出来类型是:NSGlobalBlock,全局block,存储在代码区
  • 第二种类型

屏幕快照 2015-08-31 下午7.42.01.png

打印结果: <NSMallocBlock: 0x7f8e72f0f410>
由打印结果可以看出来类型是: _NSMallocBlock ,堆block 存储在堆区

总结以上2中block的区别: 简单的说就是看block中是否用到了block之外的变量,第一种的是没有用到外部的变量,第二种的时候用到了block外部的局部变量,我们在外部打印的指向temp指针的地址和在block内部打印的结果不一样,这也许就是说的需要将局部变量copy一下,这就是区别所在.

  • 第三种类型
    我测试的环境是ARC,当你把block定义成一个属性用weak/assign来修饰的时候
    1.如果你使用了block之外的局部变量,则此时的block是<NSStackBlock: 0x7fff5a9e9a50>
    2.如果没用使用外部的局部变量,则此时的是***<NSGlobalBlock: 0x1095c6080>****

2.block循坏引用

  • 在MRC下,为了避免循环引用的问题我们需要用__block
  • 在ARC下,由于__block取变量的时候一样会被block retain,所以在ARC情况下应该使用__weak(弱引用)
  • 当block声明为属性的时候,应该使用copy来修饰,因为这样block才能将block拷贝到堆上,要不就跑栈上了,栈区就不是你控制的了啊

3.__weak的使用

参考文章__weak和__block的区别
在Block中使用成员变量,retain的不是这个变量,而会retain self
在ARC下为了防止循环引用用__weak

屏幕快照 2015-09-01 下午5.02.52.png

如果我们正在执行block中,这时如果是外部把model = nil 那么block中的weakModel的值也会被设置成nil,这也许就违背了使用的意图
解决方法是:如上图所示 __strong接受一些weakmodel,这样就可以避免

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,340评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,762评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,329评论 0 329
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,678评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,583评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,995评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,493评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,145评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,293评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,250评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,267评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,973评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,556评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,648评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,873评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,257评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,809评论 2 339

推荐阅读更多精彩内容

  • 《Objective-C高级编程》这本书就讲了三个东西:自动引用计数、block、GCD,偏向于从原理上对这些内容...
    WeiHing阅读 9,785评论 10 69
  • Block简介(copy一段) Block作为C语言的扩展,并不是高新技术,和其他语言的闭包或lambda表达式是...
    qui丶MyLove阅读 402评论 0 0
  • 前言 Blocks是C语言的扩充功能,而Apple 在OS X Snow Leopard 和 iOS 4中引入了这...
    小人不才阅读 3,751评论 0 23
  • 一、Objective-C发展史 Objective-C从1983年诞生,已经走过了30多年的历程。随着时间的推移...
    没事蹦蹦阅读 5,809评论 12 34
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,112评论 29 470