zoukankan      html  css  js  c++  java
  • block的注意点

    1). 在block内部使用外部指针且会造成循环引用情况下,需要用__week修饰外部指针:
        __weak typeof(self) weakSelf = self; 
    2). 在block内部如果调用了延时函数还使用弱指针会取不到该指针,因为已经被销毁了,需要在block内部再将弱指针重新强引用一下。
        __strong typeof(self) strongSelf = weakSelf;
    3). 如果需要在block内部改变外部栈区变量的话,需要在用__block修饰外部变量。


    补充:

      block使用什么修饰,往往知道是copy,那么为什么要使用copy?
      block本身是像对象一样可以retain,和release。但是,block在创建的时候,它的内存是分配在栈上的,而不是在堆上。

          他本身的作于域是属于创建时候的作用域,一旦在创建时候的作用域外面调用block将导致程序崩溃。

          因为栈区的特点就是创建的对象随时可能被销毁,一旦被销毁后续再次调用空对象就可能会造成程序崩溃,在对block进行copy后,block存放在堆区.

          使用retain也可以,但是block的retain行为默认是用copy的行为实现的,
          因为block变量默认是声明为栈变量的,为了能够在block的声明域外使用,所以要把block拷贝(copy)到堆,所以说为了block属性声明和实际的操作一致,最好声明为copy。

  • 相关阅读:
    SSH整合简述一
    错误:找不到类org.springframework.web.context.ContextLoaderListener
    Spring(七)持久层
    CSS 类选择器(四)
    BeanFactory not initialized or already closed
    Spring(六)AOP切入方式
    Postman Mock Server
    Sentry快速开始并集成钉钉群机器人
    OAuth2实现单点登录SSO
    图解TCP三次握手
  • 原文地址:https://www.cnblogs.com/jukaiit/p/10447800.html
Copyright © 2011-2022 走看看