oc55--ARC单个对象的内存管理

简介:
复制代码
//  Person.h

#import <Foundation/Foundation.h>

@interface Person : NSObject

@end
复制代码
复制代码
//  Person.m

#import "Person.h"

@implementation Person

- (void)dealloc
{
    
    NSLog(@"%s", __func__);
//    [super dealloc];      //ARC不准写
}
@end
复制代码
复制代码
//
//  main.m
//  ARC基本概念
//  不准许使用retain,release,dealloc里面不准许[super dealloc],编译器特性不是运行时特性,是xocde的功能,不是运行时跟你回收内存,而是xcode在编译的时候会跟你插入retain,release,是xcode帮你写了一些释放内存的代码。其他语言的垃圾回收机制是定时的去查看,没有使用就回收,ARC是写好了代码,执行代码,不是定时的去查看。完全消除了手动内存的管理。ios5之后默认就是ARC的。    插入代码之后就可以在手机上面运行了。

#import <Foundation/Foundation.h>
#import "Person.h"

int main(int argc, const char * argv[]) {

    Person *p1 = [[[Person alloc] init] autorelease];   //报错,ARC不准写autorelease
     //默认情况下所有的指针都是强指针
    Person *p = [[Person alloc] init];
    [p retain]; //报错,ARC不准写retain
    [p release];  //报错,ARC不准写release
    
    
    {
        Person *p5 = [[Person alloc]init]; //大括号执行完,p5就销毁了,就没有强指针指向这个对象了,那么这个对象就销毁了
    }   //  [Person dealloc]
    
    
    {
        Person *p6 = [[Person alloc]init]; //
        p6 = nil;   // 只要没有强指针,对象就释放。单个对象内存管理:不使用就置位nil,
        //  [Person dealloc]
    }
    

    
    
    {
        // ARC判断对象是否释放,并不是判断引用计数。  ARC的判断准则: 只要没有强指针指向对象, 对象就会释放
        // 默认情况下所有的指针都是强指针
        Person *p = [[Person alloc] init];
        p = nil; //[Person dealloc]
        __strong Person *p1 = [[Person alloc] init];
//        // 弱指针
        __weak Person *p2 = p1;
        p1 = nil; //[Person dealloc]
        // 在开发中, 千万不要使用一个弱指针保存一个刚刚创建的对象
        // 立即释放
        __weak Person *p3 = [[Person alloc] init];  //[Person dealloc]
    }
    
    return 0;
}
复制代码

 


本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/7435261.html,如需转载请自行联系原作者

相关文章
|
存储 安全 算法
深入剖析JVM内存管理与对象创建原理
JVM内存管理,JVM运行时区域,直接内存,对象创建原理。
37 2
|
1月前
|
存储 算法 安全
【JVM】深入理解JVM对象内存分配方式
【JVM】深入理解JVM对象内存分配方式
26 0
|
6月前
|
存储 安全 程序员
浅谈内存管理及僵尸对象
浅谈内存管理及僵尸对象
33 0
|
1月前
|
Python
Python中如何判断两个对象的内存地址是否一致?
Python中如何判断两个对象的内存地址是否一致?
17 0
|
1月前
|
存储 安全 Java
【JVM】Java堆 :深入理解内存中的对象世界
【JVM】Java堆 :深入理解内存中的对象世界
49 0
|
2月前
|
存储 编译器 程序员
近4w字吐血整理!只要你认真看完【C++编程核心知识】分分钟吊打面试官(包含:内存、函数、引用、类与对象、文件操作)
近4w字吐血整理!只要你认真看完【C++编程核心知识】分分钟吊打面试官(包含:内存、函数、引用、类与对象、文件操作)
105 0
|
2月前
|
存储 缓存 算法
深入理解JVM - 对象分配内存
深入理解JVM - 对象分配内存
29 1
|
3月前
|
存储 缓存 算法
对象和数组并不是都是在堆上分配内存的
对象和数组并不是都是在堆上分配内存的
25 0
|
8月前
|
缓存 关系型数据库 MySQL
高性能内存对象缓存Memcached
高性能内存对象缓存Memcached案例
|
4月前
|
存储 Java
JVM(四):对象的内存布局
JVM(四):对象的内存布局