zoukankan      html  css  js  c++  java
  • 01-面试之内存管理

    1:OC使用的"引用计数机制"管理对象.如果对一个对象使用了alloc,[Mutable]copy,retain,那么你必须使用相应的realease或者autorelease.

    *自己生成并持有对象<alloc, new, copy,mutableCopy等>,持有对象<retain>,释放对象<realease>,废弃对象<dealloc>.

    *autoreleasepool延迟减1, 和autoreleasepool结合在一起使用,

    *autoreleasepool的作用是将声明为autoreleasepool的对象丢进离他最近的自动释放池(@autoreleasepool)中, 当执行到左大括号时自动释放池销毁时, 会为池中的每一个对象都发送一个release消息

     /**********************

    MRC(manual reference counting)

    MRC常见内存问题:

    1.野指针问题:访问不该访问的内存, 空间已经被系统回收,已经无权访问. 安全隐患

     2.过度释放:对同一块空间释放多次, 程序立即Crash

     3.内存泄露:空间使用完之后没有立即回收. 造成内存泄露. 安全隐患, 某一天crash

     assign:针对于基本数据类型, 也可以针对于对象, 比如代理

     retain:只能针对与对象, 引用计数+1

     copy:只能针对与对象, 开辟新的空间, 原有对象引用计数不变, 新的对象引用计数+1.

     当把属性的语义特性声明为retain/copy之后, 最后一次retain/copy的引用计数+1操作, 没有对应引用计数-1操作, 所以需要重写dealloc方法, 将最后一次retain/copy对应上release.

    *属性的修饰

    1:原子特性(和线程有关)atomic,noatomic

    2:语义特性(和内存相关)assign,retain,copy

    *语义特性为assign时set方法get方法

    @synthesize age = _age;

    - (void)setAge:(NSInteger)age {

        _age = age;

    }

    - (NSInteger)age {

        return _age;

    }

    *语义特性为retain时set方法get方法

    @synthesize name = _name;//如果自己实现setget方法,需要添加@synthesize如果不添加就不会自动生成实例变量

    - (void)setName:(NSString *)name {

        if (_name != name) {

            [_name release];

            _name = [name retain];

        }

    }

    - (NSString *)name {

        return [[_name retain] autorelease];

    }

    *语义特性为copy时set方法get方法

    @synthesize name = _name;

    - (void)setName:(NSString *)name {

        if (_name != name) {

            [_name release];

            _name = [name copy];

        }

    }

    - (NSString *)name {

        return [[_name retain] autorelease];

    }

     /**********************

    ARC(automatic reference counting)

    [string retainCount];//获取当前对象的计数

  • 相关阅读:
    【转】【Salesfoece】Salesforce 应用生命周期管理
    【Apex】【Salesfoece】Salesforce 的 package.xml 文件
    【转】【Salesfoece】Apex计划作业框架的实现--用于实现数据的定时自动处理。
    【转】【Salesfoece】Apex 的 Trigger 类简介
    【转】【Salesforce】提高 Visualforce 页面加载效率的小知识
    「这是啥」关于三维偏序
    Javaweb中PO BO VO DTO POJO DAO DO概念理解
    Python多进程、多线程及各自的适用场景
    基于LDA主题模型和SVM的文本分类
    理解accuracy/precision_score、micro/macro
  • 原文地址:https://www.cnblogs.com/guofuzhang/p/5237756.html
Copyright © 2011-2022 走看看