//main.m
#import <Foundation/Foundation.h>
#import "Person.h"
//#import "Dog.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person * person = [[Person alloc] init];
Dog * dog = [[Dog alloc] init];
//把狗给人
person.dog = dog;
//把人给狗
dog.person = person;
}
return 0;
}
//Person.h
#import <Foundation/Foundation.h>
#import "Dog.h"
/*内存管理:
strong 对于普通对象
copy 字符串
assign 基本数据类型
weak 循环引用一端必须使用weak
*/
@interface Person : NSObject
//年龄
@property (nonatomic, assign) int age;
//姓名
@property (nonatomic, copy) NSString * name;
@property (nonatomic, strong) Dog * dog;
@end
//Person.m
#import "Person.h"
@implementation Person
//ARC中不用再写dealloc方法中的[super dealloc]了,只需要验证对象是否被销毁了。
- (void)setDog:(Dog *)dog {
_dog = dog;
}
- (void)dealloc
{
NSLog(@"%s", __func__);
}
@end
//Dog.h
#import <Foundation/Foundation.h>
@class Person;
@interface Dog : NSObject
//当出现循环引用的时候,必须保证一端是weak的
@property (nonatomic, weak) Person * person;
@end
//Dog.m
#import "Dog.h"
@implementation Dog
- (void)setPerson:(Person *)person {
_person = person;
}
- (void)dealloc
{
NSLog(@"%s", __func__);
}
@end