zoukankan      html  css  js  c++  java
  • 内存管理

    不要使用任何刚释放的内存,否则可能无用陈旧的数据,从而引发各种各样的错误,而且如果该内存已经加载了其他数据,将会破坏这些新数据。
     
    - (id) retain;
    - (oneway void) ralease;
    - (NSUInteger) retainCount;
    当使用alloc、new方法或者通过copy消息创建一个对象时,对象的保留计数器值被设置为1。要增加对象的保留计数器的值,可以给对象发送一条retain消息。要减少的话。可以给对象发送一条release消息。
     
    Cocoa中有一个自动释放池(autorelease pool)的概念。
    有两种方法可以创建一个自动释放池:通过@autoreleasepool关键字;通过NSAutoreleasePool对象。
     
    内存管理的一些小规则:
    当你使用new、alloc、或cpoy方法创建一个对象时,该对象的保留计数器的值为1。当不再使用该对象时,应该向该对象发送一条release或autorelease消息。这样,该对象就爱那个在其使用寿命结束时被销毁。
    当通过其他方法获得一个对象时,假设该对象的保留计数器的值为1,而且已经被设置为自动释放,那么不需要执行任何操作来确保该对象得到清理。如果打算在一段时间内使用该对象,则需要保留它并确保在操作完成时释放它。
    如果保留了某个对象,就需要释放或自动释放该对象,必须保持retain方法和release方法的使用次数相等。
     
    arrayWithCapacity:方法与alloc、new、copy方法不同,假设该对象被返回时保留计数器的值为1且已经被设置为自动释放。当自动释放池被销毁时,向array对象发送release消息,该对象的保留计数器的值归0,其占用的内存被回收。
     
    自动释放池以栈的形式实现:当创建了一个新的自动释放池时,就被添加到栈顶。接收autorelease消息的对象将被放入到最顶端的自动释放池中。如果将一个对象放入一个自动释放池中,然后创建一个新的自动释放池,再销毁该新建的自动释放池,则这个自动释放池对象仍将存在,因为容纳该对象的自动释放池仍然存在。
     
    垃圾回收机制会对移动设备产生非常不利的影响,因为移动设备比电脑更私人化,资源更少。用户可不想再玩游戏或打电话时因为系统突然进行内存清理而卡住。
     
    自动引用计数(automatic reference counting, ARC)
    想在代码中使用ARC,需满足一下三个条件:
    能够确定哪些对象需要进行内存管理:对象的最上层集合知道如何管理它的子对象。
    能够表明如何去管理对象:必须能够对某个对象的保留计数器的值进行加1或减1的操作。
    有可行的方法传递对象的所有权:传递对象的时候,程序需要在调用者和接收者之间传递所有权。
     
    程序会创建一个NSException实例来抛出异常,并会使用以下两种技术之一:
    使用”@throw 异常名:”语句来抛出异常;
    向某个NSException对象发送raise消息。
    throw theException;
    [theException raise]; 
  • 相关阅读:
    Python time ctime()方法
    Python time clock()方法
    Python time asctime()方法
    Python time altzone()方法
    Python 日期和时间
    java——字符串常量池、字符串函数以及static关键字的使用、数组的一些操作函数、math函数
    java——API
    java——类、对象、private、this关键字
    Java——方法及构造方法、intellij IDEA中的一些快捷键
    IntelliJ IDEA 运行java程序时出现“程序发生找不到或无法加载主类 cn.test1.test1”错误
  • 原文地址:https://www.cnblogs.com/tcsong24/p/5642918.html
Copyright © 2011-2022 走看看