weak delegate

作者: sprint | 来源:发表于2015-10-02 18:00 被阅读303次

delegate委托模式是一种常用的设计模式 ,我们通常将声明为delegate属性指定为weak,在这个delegate的实际的对象被释放时会被置为nil。在swift中我们也许会写出这样的代码:

protocol MyDelegate {

    func method()

}

class MyClass {

   weak var delegate:MyDelegate? //会编译错误 

}

在delegate声明出会编译出错 “weak cannot be applied to non-class type MyDelegate”,

这是因为Swift的protocol是可以被 class struct enum这几种类型遵守,而对于struct enum这样的类型,本身就不能通过引用计数来管理内存,所以不能通过weak概念的关键字修饰。

要想在Swift中使用weak delegate,我们可以通过下面两种方式。

1,将protocol限制在class内实现。

protocol MyDelegate : class {

    func method()

}

2,将protocol声明为Object-C的,这样可以通过在protocol前面加上@objc,  Object-C的protocol只有类能实现,这样就合理了。

@objc protocol MyDelegate {

      func method()

}

相比起@objc, clasc更能表现出问题实质,可以说是更好的解决方式。

相关文章

  • ios 日常总结

    一 : Delegate weak/strong

  • weak delegate

    delegate委托模式是一种常用的设计模式 ,我们通常将声明为delegate属性指定为weak,在这个dele...

  • IOS

    一、Delegate为什么要用weak或者assign修饰,不能用strong?说明:weak、assign修饰的...

  • iOS 关于 delegate 修饰词的错误认知

    不是所有的 delegate 都必须使用 weak 的,他是可以使用 strong 的 对于 delegate 很...

  • 修饰关键字的选择问题

    1.代理用nonatomic, weak修饰weak:指明该对象并不负责保持delegate这个对象,delega...

  • 读书笔记: swift tips weak delegate

    关于delegate的使用 在ARC模式下,使用delegate的时候,为了避免循环引用,我们常常会采用weak ...

  • iOS delegate weak

    weak指针主要用于“父-子”关系,父亲拥有一个儿子的strong指针,因此是儿子的所有者;但是为了阻止所有权回环...

  • Swift weak delegate

    需要使用delgate时,为了防止循环引用需要添加weak关键字,但是上面的代码XCode会报错。因为swift里...

  • runtime之weak指针的实现

    我们经常写delegate ,修饰有weak指针,而不用assign,这是因为用weak指针不会,在delegat...

  • 需要了解的基础知识点

    一、weak和assign有什么区别 修饰delegate的属性是weak还是assign比较好? 答:assig...

网友评论

    本文标题:weak delegate

    本文链接:https://www.haomeiwen.com/subject/xnrgcttx.html