iOS strong和weak的异同

来源:互联网 发布:下载免费大片软件 编辑:程序博客网 时间:2024/06/18 03:47
之前说过iOS是高技能行业,对开发者要求很高,很多相似的知识点要分清,strong 和weak,它们都是指针的属性,当遇到比如UIButton*的时候,这个property是个指针,需要指定strong或者weak。
  strong表示保存这个指针对象的内存直到结束使用。也就是说,强力的指向了一个区域,直到指向nil或者我自己也不在内存上面了。
  weak表示如果没人在用这个指针了,那就设为nil。只要还有人strong指向它那么就保留它,也就是说,不再指向它了也没有关系。事实上,weak还表示如果没有人指向它了,它就会被清除内存,同时就被指向nil,因为不能读取不存在的东西。
  ios5支持weak,设置了weak只有ios5能够在runtime的时候自动设置nil
  这不是垃圾回收,这还是reference counting,用reference counting表示堆上还有多少strong指针,垃圾回收不可控,这是完全可控的,当失去最后一个strong指针,立刻释放内存。strong、weak都是针对property的,本地变量都是strong的。
  如果把strong 和 weak 与气球联想起来或许更容易理解。只有当没有人牵住气球的绳子的时候气球才会飞走(dealloc),牵住气球绳子的人数就是retain count。很多人可以通过绳子牵住同一个气球,你可以用strong或者是weak来对相关的对象进行get/set properties和call methods操作。强【strong】就像是牵住气球的绳子,只要你牵住了绳子,气球就不会飞走。弱【weak】就像是盯着气球看,你能看到它,access properties,call methods,但是气球的绳子不在你手上,如果所有牵住气球的人都松了手,气球就飞走了,然后你也无法对它进行操作了。
0 0
原创粉丝点击