zoukankan      html  css  js  c++  java
  • 2013.8.1 作业

    一.NSAutoreleasepool中的release消息和drain消息的区别?

    release,在引用计数环境下,由于NSAutoReleasePool是一个不可以被retain的类型,所以release会直接dealloc pool对象。当pool被dealloc的时候,pool向所有在pool中的对象发出一个release的消息,如果一个对象在这个pool中autorelease了多次,pool对这个对象的每一次autorelease都会release。在GC环境下release是一个no-op操作(代表没有操作,是一个占据进行很少的空间但是指出没有操作的计算机指令)。

    drain,在引用计数环境下,它的行为和release是一样的。在GC的环境下,这个方法调用objc_collect_if_needed出发GC。

     

    二.你对自动释放池的理解?

    1. NSAutoreleasePool实际上是个对象引用计数自动处理器。NSAutoreleasePool可以同时有多个,它的组织是个栈,总是存在一个栈顶pool,也就是当前pool,每创建一个pool,就往栈里压一个,改变当前pool为新建的pool,然后,每次给pool发送drain消息,就弹出栈顶的pool,改当前pool为栈里的下一个 pool。

    2. 在程序的入口main函数就调用NSAutoreleasePool,这样保证程序中不调用NSAutoreleasePool,但在退出时自动释放。新开线程最好实现NSAutoreleasePool

    3. NSAutoreleasePool的管理范围是在NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];与[pool release];之间的对象

    4. NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init]; 

    当执行[pool autorelease]的时候,系统回进行一次内存释放,把autorelease的对象释放掉,如果没有NSAutoreleasePool , 那这些内存不会释放

    注意,对象并不是自动被加入到当前pool中,而是需要对对象发送autorelease消息,这样,对象就被加到当前pool的管理里了。当当前pool接受到drain消息时,它就简单的对它所管理的所有对象发送release消息。

    例如

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    NSString* nsstring;

    char* cstring = "Hello CString";

    nsstring = [NSString stringWithUTF8String:cstring];

    [pool release];

    5. alloc的对象必须显示释放

    例如:

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    NSString* string = [[NSString alloc] init];

    [string stringByAppendingString:@"Hello World!"];

    [pool release];

    [nsstring release];

    三.可以手动调用 dealloc 方法吗?怎样处理的 dealloc 方法?

    不可以,系统自动调用

    4.写一个类 A 继承与B,重写A和B中的 dealloc 方法和 init 方法,并使用自动释放池释放对象.

    5.编写一个程序,测试添加和移除字典中的条目时,对添加和移除对象的引用计数有什么影响.

  • 相关阅读:
    Shell学习笔记之shell脚本和python脚本实现批量ping IP测试
    SNMP学习笔记之SNMPv3的配置和认证以及TroubleShooting
    Web负载均衡学习笔记之四层和七层负载均衡的区别
    SNMP学习笔记之SNMP树形结构介绍
    Web负载均衡学习笔记之实现负载均衡的几种实现方式
    HCNP学习笔记之子网掩码的计算和划分详细
    HCNP学习笔记之IP地址、子网掩码、网关的关系
    Linux学习笔记之passwd:Authentication token manipulation error_错误的解决办法
    ubuntu 系统关键指令
    Jetson tk1 hash sum mismatch
  • 原文地址:https://www.cnblogs.com/ymonke/p/3231262.html
Copyright © 2011-2022 走看看