pragma mark ARC中對多個對象內(nèi)存管理
pragma mark 概念
/**
ARC下的@property參數(shù)
strong 用于OC對象 相當(dāng)于 MRC中的 retain
weak 用于OC對象 相當(dāng)于 MRC中的 assgin
assgin 用于基本數(shù)據(jù)類型, 跟MRC的assgin一樣
*/
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>
@class Dog;
@interface Person : NSObject
// MRC, A對象想擁有B對象, 需要 對B對象進(jìn)行一次retain
// A對象不用B對象了, 需要 對B對象進(jìn)行一次release
// property的時候 進(jìn)行retain, dealloc的時候 進(jìn)行release
// ARC, A對象想擁有B對象, 那么就需要用一個強指針 指向 B 對象
// A對象 不用 B 對象了, 什么都不需要做, 編譯器會自動幫我們做
#warning 在ARC保存一個對象用strong, 相當(dāng)于MRC的retain
@property (strong,nonatomic) Dog *dog;
@end
Person.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
// assgin是專門用于保存基本數(shù)據(jù)類型的,如果保存對象用weak
@property (nonatomic,weak)Person *owner;
@end
Dog.m
#import "Dog.h"
@implementation Dog
- (void)dealloc
{
NSLog(@"%s",__func__);
}
@end
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者