小编Aks*_*kur的帖子

强引用变量可能会导致内存问题

我已经编程Swift了几个月了.最近,我更多地关注Swift语言如何运作的概念.


因此,最近在阅读关于自动引用计数(ARC)的Apple文档时,我遇到了以下几行:

这一个在上面:

在大多数情况下,这意味着内存管理在Swift中"正常工作",您不需要自己考虑内存管理.当不再需要这些实例时,ARC会自动释放类实例使用的内存.

在下一段中,以下内容如下:

为了实现这一点,无论何时将类实例分配给属性,常量或变量,该属性,常量或变量都会对实例进行强引用.该引用被称为"强"引用,因为它保持对该实例的坚定持有,并且只要该强引用仍然存在就不允许它被释放.


我对这种情况的动态有点困惑.我在使用故事板时注意到,你设置了对弱的引用,因此类看起来像这样,我也称之为案例1:

情况1

class SomeClass : UIViewController {
    @IBOutlet weak var nameLabel : UILabel!

    override func viewDidLoad() {
        nameLabel.text = "something."  
    }  
}
Run Code Online (Sandbox Code Playgroud)

这里,标签与ViewController有一对一的弱引用,一旦Controller被更改,引用就会被破坏(内存dealloc),因为它很弱.因此,没有与内存有关的问题.

如果上述陈述错误或松散,请原谅我.如果有人确认我的假设或反击它,我会很高兴.


我的问题是关于第二种情况,我不使用故事板和类如下所示:

案例2

class SomeClass : UIViewController {
    var nameLabel : UILabel = {

      let label = UILabel()
      label.translatesAutoresizingMaskIntoConstraints = false
      return label

    }()

    override func viewDidLoad() {
        view.addSubView(nameLabel)
        // view.addConstraints...
    }  
}
Run Code Online (Sandbox Code Playgroud)

对于上面的情况,我的假设是ViewController与标签有一对一的强引用,ViewController中的视图也有标签的强引用..如果类被更改/标签从子视图中删除..那么我认为记忆不会被解除分配.或者至少视图控制器将保持对标签的强引用(根据文档).

我通过从视图的子视图中删除标签并打印出标签来确认这一点(它给了我一个UILabel的实例,其框架为0原点和0大小.)因此一个实例不是零.

我唯一可以从中收集到的是,尽管标签已从UIView中删除,但它仍然保持与控制器的强引用,因此在内存中保持永久状态.我对吗?

如果是这样的话.我应该如何防止我的代码出现此类内存问题?更大的问题是,如果我像这样声明我的变量,我将它添加为nil,同时将其添加为控制器中主视图的子视图.

    weak var nameLabel : UILabel = {

      let …
Run Code Online (Sandbox Code Playgroud)

memory-management ios automatic-ref-counting swift

14
推荐指数
1
解决办法
1004
查看次数

如何在文档Xcode中添加链接/引用到另一个方法?

我在课堂上为我的方法添加了一些描述.这就是我实现这个目标的方法:

在此输入图像描述

点击后看起来像这样......

在此输入图像描述

如何使带下划线的方法可以点击?我希望它被引用,以便当用户点击它时,它们被定向到特定的网页以获取文档.

它甚至可能吗?在此先感谢,任何帮助将不胜感激

documentation xcode ios swift

10
推荐指数
2
解决办法
4545
查看次数

如何从Swift中的日期获取星期几

我可以用以下格式打印日期:2018年3月19日,星期一,但是我不确定如何以这种格式获取星期几。

请帮忙

ios swift

3
推荐指数
2
解决办法
4900
查看次数