deinit swift_swift deinit - CSDN
  • swift deinit 不被执行

    千次阅读 2019-03-07 20:23:22
    前言: strong:当你声明一个属性时,它默认就是强引用 weak:弱引用对象的引用计数不会+1, 必须为可选类型变量 在声明弱引用对象是必须用var关键字, 不能用let.... deinit { //移除监听 NotificationCenter.defau...

    前言:

    strong:当你声明一个属性时,它默认就是强引用

    weak:弱引用对象的引用计数不会+1, 必须为可选类型变量

    在声明弱引用对象是必须用var关键字, 不能用let.
    因为弱引用变量在没有被强引用的条件下会变为nil, 而let常量在运行的时候不能被改变.

     

      deinit {
            //移除监听
            NotificationCenter.default.removeObserver(self)
        }

    这个种情况

    1.当前页面是否存在delegate 
     

     var delegate:ZQStarReteViewDelegate?//这种是错误的写法
    
     weak open var delegate:ZQStarReteViewDelegate?

    2.方法体中是否用到了self 

     在swift中 有特殊的写法  [weak self]
            loadData { [weak self] (dataString) -> () in
    
                //以后在闭包中中 使用self 都是若引用的
                print("\(dataString) \(self?.view)")
            }
    或者
      weak var weakSelf = self
            loadData { (dataString) -> () in
                print("\(dataString) \(weakSelf?.view)")
            }

    这种问题又多出现在RX 的监听事件中

     //监听键盘弹出通知
            _ = NotificationCenter.default.rx
                .notification(NSNotification.Name.UIKeyboardWillShow)
                .takeUntil(self.rx.deallocated) //页面销毁自动移除通知监听
                .subscribe(onNext: { _ in
                    print("键盘出现了")
                })
             
            //监听键盘隐藏通知
            _ = NotificationCenter.default.rx
                .notification(NSNotification.Name.UIKeyboardWillHide)
                .takeUntil(self.rx.deallocated) //页面销毁自动移除通知监听
                .subscribe(onNext: { _ in
                    print("键盘消失了")  
                })
    //这里要注意这就是一个坑,这里面就写一个打印事件,事件定是会被移除。但是这种一旦写入 如
     //监听键盘隐藏通知
            _ = NotificationCenter.default.rx
                .notification(NSNotification.Name.UIKeyboardWillHide)
                .takeUntil(self.rx.deallocated) //页面销毁自动移除通知监听
                .subscribe(onNext: { _ in
                    print("键盘消失了")  
                  self.text_name = "张三"
                })
    这个事件就不会被移除
    此时应该
    1. _ = NotificationCenter.default.rx
                .notification(NSNotification.Name.UIKeyboardWillHide)
                .takeUntil(self.rx.deallocated) //页面销毁自动移除通知监听
                .subscribe(onNext: {[weak self] _ in
                    print("键盘消失了")  
                  self?.text_name = "张三"
                })
    2.
     weak var weakSelf = self
            _ = NotificationCenter.default.rx
                .notification(NSNotification.Name.UIKeyboardWillHide)
                .takeUntil(self.rx.deallocated) //页面销毁自动移除通知监听
                .subscribe(onNext: { _ in
                    print("键盘消失了")  
                  weakSelf?.text_name = "张三"
                })

     

    展开全文
  • swift iOS 不执行deinit的原因

    千次阅读 2017-07-21 10:07:03
    swift iOS 不执行deinit的原因: 1、使用了UITabView,没做优化(其中一个优化方案是,在UIView中自定义一个,然后让UIViewController调用) 2、代理使用了强引用,delege = self   改成:  weak var weakSelf...

    swift iOS 不执行deinit的原因:

    1、使用了UITabView,没做优化(其中一个优化方案是,在UIView中自定义一个,然后让UIViewController调用)

    2、代理使用了强引用,delege = self 

         改成:

         weak var weakSelf = self

         delete  = weakSelf!

    3、方法体传参中使用了强引用


    原来的代码

    修改后的代码

    —————我是优雅的广告,请多多关注简书作者,鱼笨自由—————

    展开全文
  • Swift deinit

    2017-03-21 10:13:48
    deinit: 析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数 和OC中的dealloc 一样的,通常在deinit和dealloc中需要执行的操作有: 对象...

    deinit: 析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数

    OC中的dealloc 一样的,通常在deinitdealloc中需要执行的操作有:

    • 对象销毁
    • KVO移除
    • 移除通知
    • NSTimer销毁

    当前VC销毁之后,所持有对象也会销毁.

    展开全文
  • 原文:http://coolketang.com/staticCoding/5a9925ad128fe1189bdbd57d.html1. 本节课将为你演示类的析构方法。系统会自动释放不再需要的实例,以释放各种资源,在一个类的实例被释放之前,析构函数会被调用。...

    原文:http://coolketang.com/staticCoding/5a9925ad128fe1189bdbd57d.html

    1. 本节课将为你演示类的析构方法。系统会自动释放不再需要的实例,以释放各种资源,在一个类的实例被释放之前,析构函数会被调用。 



    2. 首先定义一个指定名称的类。 


    3. 然后给类添加两个属性。 


    4. 添加一个初始化方法,用来设置两个属性的值。 


    5. 在初始化方法中,设置两个属性的值。 


    6. 给类添加一个方法,用来输出属性的值。 


    7. 在此使用析构关键词来定义一个析构函数,析构函数是在实例释放发生之前被自动调用的。 


    8. 完成类型的创建之后,实例化一个该类的对象。并设置对象的两个属性的值。 


    9. 接着调用对象的方法,并观察第17行右侧的结果。 


    10. 最后将对象设置为空,此时析构方法被调用,并在第22行的右侧,以及底部的控制台输出了析构方法被执行的日志。 


    本文整理自:《Swift4互动教程》,真正的[手把手]教学模式,用最快的速度上手iOS开发和Swift语言,苹果商店App Store免费下载:https://itunes.apple.com/cn/app/id1320746678,或扫描本页底部的二维码。课程配套素材下载地址:资料下载


    展开全文
  • Swiftdeinit 取代 Objective-C dealloc

    千次阅读 2017-05-24 10:19:06
    Objective-C -(void)dealloc {  NSLog(@"对象被delloc没有造成循环引用"); } Swift deinit {  print("对象被delloc没有造成循环引")  }
  • 原因:闭包里面引用了self,但是未声明 [ unowned self ]
  • //: Playground - noun: a place where people can play// 1. init() 类的初始化(构造方法)// 使用默认的构造函数 class Student { // 类属性 var name:String = "" var number: Int = 0 } ...
  • //构造器,即初始化函数 使用 ...//析构器,立即为释放资源 使用deinit class Player {  var x:Int  init(i:Int)  {  println("调用初始化函数")  x=i  }    func add
  • swift的初始化与反初始化(init, deinit)

    千次阅读 2016-09-02 09:35:27
    学习swit语法,本文是讨论class的init()与deinit(),本人是做java出生,java的gc在swift中也得到了很好的解释,看swift初始化没有难度,当引用在代码中不在使用的时候,swift内存就要释放,deinit()方法就会被得到...
  • swift-33deinit

    2019-06-11 18:16:07
    我以前做的swift笔记, 之前都是整理在onenote上, 最近想到整理出博客. 也方便自己查找, 可以当做自己的一份文档. 析构函数 deinit 与oc中的dealloc 等价 没有 func -> 不让调用 没有() -> 不让重载 在对象被...
  • Swift中移除通知

    千次阅读 2016-08-01 10:29:37
    在OC中移除通知,一般都移除通知的代码放到dealloc方法中,而在Swift中移除通知,使用deinit(类反初始化方法(析构方法))方法。代码如下: //MARK:-移除通知 deinit { NSNotificationCenter.defaultCenter()....
  • Swift Lazy的陷阱

    2019-06-10 10:57:10
    最近我们项目线上出现了几个Swift代码的crash问题,和大家一起分析一下问题的原因。 首先看代码: class DEFContactDetailViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { ...
  • Swift 析构器deinit

    2019-08-10 14:40:51
    析构器用关键字deinit来标识,类似于构造器用init来标识。    原理:  Swift会自动释放不再需要的实例以释放资源。Swift通过自动引用计数ARC处理实例的内存管理。通常当你的实例被释放时,不需要手动地 进行...
  • swift中通过 storyboard或者编程的方法 来实现一个 UITabBarController 进行各个UIViewController进行切换 相关阅读:http://makeapppie.com/2014/09/09/swift-swift-using-tab-bar-controllers-in-swift/ 前面...
  • swift中delegate的使用注意

    千次阅读 2018-08-14 10:46:01
    swift中delegate的使用注意 原文连接:https://link.juejin.im/?target=http%3A%2F%2Fmarkmiao.com%2F2017%2F03%2F10%2Fswift%E4%B8%ADdelegate%E7%9A%84%E4%BD%BF%E7%94%A8%E6%B3%A8%E6%84%8F%2F delegate是iOS...
  • Swift 代理传值

    2019-07-17 11:31:01
    需求:上个页面的值,会传到当前页面。 传值页面: class NextViewController: UIViewController { weak var delegate: NextVCDelegate? @IBOutlet weak var textField: UITextField!... override func ...
  • 窥探Swift编程之错误处理与异常抛出
  • Swift销毁(Deinitialization)

    千次阅读 2015-10-31 18:46:13
    Swift中,也支持ARC机制,也就是内存自动回收机制。在上一篇博文我们将了《Swift初始化(Initialization)》,既然有了初始化的方法,Swift也提供了销毁的通知方法。 deinit只能在引用类型中使用,也就是只能在类中...
1 2 3 4 5 ... 20
收藏数 2,196
精华内容 878
关键字:

deinit swift