ARC内存管理

示例代码

Dog.h
#import <Foundation/Foundation.h>
@class Person;
@interface Dog : NSObject
@property (nonatomic, strong) Person *owner;
@end

Dog.m
#import "Dog.h"
@implementation Dog
- (void)dealloc{
    NSLog(@"Dog dealloc...");
}

@end
Person.h

#import <Foundation/Foundation.h>
#import "Dog.h"
@interface Person : NSObject

@property (nonatomic, weak) Dog *dog;
@end
Person.m
#import "Person.h"

@implementation Person

- (void)dealloc{
    NSLog(@"Person dealloc...");
}
@end
main.m
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Dog.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...

        Person *p = [Person new];
        Dog *d = [Dog new];
        p.dog = d;
        d.owner = p;
        //1. Person中Dog属性是weak时,内存管理自动完成。d=nil,则d释放;
        //2. Person中Dog属性是strong时,Person释放后Dog才释放
//        d = nil;
//        p = nil; 
        NSLog(@"***");
        //3 循环引用问题,即双方中属性都是strong时,则出现内存泄露,解决方法即一方是strong,一方是weak;
    }
    return 0;
}

总结

MRC ARC
assign assign
retain strong(强指针)OC其他的对象 weak(弱指针)UI控件
copy copy

ARC的使用细节:
不能调用release、retain、autorelease、retainCount
可以重写dealloc,但是不能调用[super dealloc]
ARC中的@property
➢ strong : 用于OC对象, 相当于MRC中的retain
➢ weak : 用于OC对象,相当于MRC中的assign,不同点是MRC中的assign在清空指针指向的对象后不会不会将原指针赋值为nil,而ARC中weak指针指向的对象被清空后会讲weak指针赋值为nil,避免野指针问题。
➢ assign : 用于基本数据类型, 跟MRC中的assign一样
➢ copy : 一般用于NSString, 跟MRC中的copy一样
➢ 在ARC情况下解决”循环retain”的问题:@property一边用strong,一边用weak。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值