zoukankan      html  css  js  c++  java
  • ARC管理内存(一)

    相关概念

    • 当程序执行某个方法(或函数)时,会从内存中名为(stack)的区域分配一块内存空间,这块内存空间称为(frame)。帧负责保存程序在方法内声明的变量的值。在方法内声明的变量称为局部变量(local variable)。
    • 当某个应用启动并运行main函数时,它的帧会被保存在栈的底部。当main调用另一个方法(或函数)时,这个方法的帧会压入栈的顶部。被调用的方法还可以再调用其它方法,以此类推,最终会在栈中形成一个塔状的帧序列。当被调用的方法结束时,程序会将其帧从栈顶“弹出”并释放。如果同一个方法再次被调用,则应用会创建一个全新的帧,并将其压入栈的顶部。

    • (heap)是指内存中的另一块区域,和栈是分开的。为这两类内存区域分别取名堆和栈,是为了能够形象地描述这两个概念。栈会按后进先出的规则保存一组帧,而堆则包含了大量无序的活动对象,需要通过指针来保存这些对象在堆中的地址。

    1. 对象所有权
    • 指针变量暗含了对其所指向的对象的所有权(ownership)。当某个方法有一个指向某个对象的局部变量时,可以称该变量拥有(own)该变量所指向的对象。当某个对象有一个指向其它对象的实例对象时,可以称该对象拥有该实例变量所指向的对象。
    • 如果对象没有拥有者,就应该将其释放掉。没有拥有者的对象是孤立的,程序无法向其发送消息。保留这样的对象只会浪费宝贵的内存空间,导致内存泄露(memory leak)
    • 如果某个对象有一个或多个拥有者,就必须保留不能释放。如果释放了某个对象,但是其他对象或方法中仍然有指向该对象的指针(准确地说,是指向该对象被释放前的地址),那么向该指针指向的对象发送消息就会使应用崩溃。释放正在使用的对象的错误称为过早释放。指向不存在的对象的指针称为空指针(dangling pointer)或者空引用(dangling reference)。
    1. 哪些情况会使对象失去拥有者
    • 当程序修改某个指向特点对象的变量并将其指向另一个对象时。
    • 当程序将某个指向特点对象的变量设置为nil时。
    • 当程序释放对象的某个拥有者时。
    • 当从collection类中(例如数组)删除对象时。
  • 相关阅读:
    [Swift实际操作]七、常见概念-(2)点CGPoint和变形CGAffineTransform的使用
    [Swift实际操作]七、常见概念-(1).范围Range、ClosedRange和NSRange的使用实际操作
    [Swift]LeetCode263. 丑数 | Ugly Number
    [Swift]LeetCode258. 各位相加 | Add Digits
    [Swift]LeetCode920. 播放列表的数量 | Number of Music Playlists
    Web开发中,使用表格来展示每个角色对应的权限
    Web开发中,使用表格来展示每个角色对应的权限
    请妥善保管自己的QQ等网络帐号
    请妥善保管自己的QQ等网络帐号
    网络广告行业资料整理
  • 原文地址:https://www.cnblogs.com/ShaRuru/p/5040518.html
Copyright © 2011-2022 走看看