- 不要等到明天咒林,明天太遙遠(yuǎn),今天就行動(dòng)澎粟。
須讀:看完該文章你能做什么活烙?
ARC中的多個(gè)內(nèi)存管理
兩個(gè)對象 相互引用 引發(fā)了循環(huán)的時(shí)候 怎么處理
學(xué)習(xí)前:你必須會(huì)什么?(在這里我已經(jīng)默認(rèn)你具備C語言的基礎(chǔ)了)
單個(gè)對象的ARC內(nèi)存管理
一啸盏、本章筆記
一骑祟、
MRC : A對象想擁有B對象,需要對B對象進(jìn)行一次retain
A對象不用B對象了,需要對B對象進(jìn)行一次release
@property的時(shí)候 進(jìn)行 retain, dealloc的時(shí)候 進(jìn)行release
ARC : A對象想擁有B對象,那么就需要用一個(gè)強(qiáng)指針指向B對象
A對象不用B對象了,什么都不需要做,編譯器會(huì)自動(dòng)幫我們做
二、當(dāng)兩個(gè)對象相互擁有的時(shí)候
一邊用 strong 一邊用weak
在ARC中如果保存對象不要用assign,用weak
assign是專門用于保存基本數(shù)據(jù)類型的,如果保存對象 用weak
二潜圃、code
main.m
#pragma mark 05-ARC中對個(gè)對象內(nèi)存管理
#pragma mark - 代碼
#import <Foundation/Foundation.h>
#pragma mark 類
#import "Person.h"
#import "Dog.h"
#pragma mark - main函數(shù)
int main(int argc, const char * argv[])
{
Person *p = [[Person alloc]init];
Dog *d = [[Dog alloc]init];
p.dog = d;
d.owner = p;
d = nil;
NSLog(@"----");
p = nil;
return 0;
}
Person
>>>.h
#import <Foundation/Foundation.h>
/*
MRC : A對象想擁有B對象,需要對B對象進(jìn)行一次retain
A對象不用B對象了,需要對B對象進(jìn)行一次release
@property的時(shí)候 進(jìn)行 retain, dealloc的時(shí)候 進(jìn)行release
ARC : A對象想擁有B對象,那么就需要用一個(gè)強(qiáng)指針指向B對象
A對象不用B對象了,什么都不需要做,編譯器會(huì)自動(dòng)幫我們做
*/
@class Dog;
@interface Person : NSObject
// 在ARC中 保存一個(gè)對象用strong,相當(dāng)于MRC中的retain
@property (nonatomic,strong) Dog *dog;
@end
>>>.m
#import "Person.h"
@implementation Person
- (void)dealloc
{
NSLog(@"%s",__func__);
}
@end
Dog
>>>.h
#import <Foundation/Foundation.h>
@class Person;
@interface Dog : NSObject
//@property (nonatomic,strong) Person *owner;
//@property (nonatomic,assign) Person *owner;
// 在ARC中如果保存對象不要用assign,用weak
// assign是專門用于保存基本數(shù)據(jù)類型的,如果保存對象 用weak
@property (nonatomic,weak) Person *owner;
@end
>>>.m
#import "Dog.h"
@implementation Dog
- (void)dealloc
{
NSLog(@"%s",__func__);
}
@end