oc51--循环retain

简介:
复制代码
//  main.m
//  循环retain

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

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

    Person *p = [Person new];
    Dog *d = [Dog new];
    
    // 如果A对用要拥有B对象, 而B对应又要拥有A对象, 此时会形成循环retain
    // 如何解决这个问题: 不要让A retain B, B retain A
    // 让其中一方不要做retain操作即可
    p.dog = d; // retain
    d.owner = p; // retain  assign
    
    [p release];
    [d release];
    
    return 0;
}
复制代码
复制代码
//  Dog.h

#import <Foundation/Foundation.h>
@class Person;

@interface Dog : NSObject

//@property(nonatomic, retain)Person *owner;
@property(nonatomic, assign)Person *owner;
@end
复制代码
复制代码
//  Dog.m

#import "Dog.h"
#import "Person.h"

@implementation Dog

-(void)dealloc
{
    NSLog(@"%s", __func__);
//    [_owner release];
//    self.owner = nil;
    [super dealloc];
}
@end
复制代码
复制代码
//
//  Person.h

#import <Foundation/Foundation.h>
@class Dog;

@interface Person : NSObject

@property(nonatomic, retain)Dog *dog;
@end
复制代码
复制代码
//  Person.m

#import "Person.h"
#import "Dog.h"

@implementation Person


- (void)dealloc
{
    NSLog(@"%s", __func__);
//    [_dog release];
    self.dog = nil;
    [super dealloc];
}
@end
复制代码

 


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

相关文章
|
存储 iOS开发
iOS - weak 与 assign 的区别,weak自动置nil
weak和assign是一种“非拥有关系”的指针,通过这两种修饰符修饰的指针变量,都不会改变被引用对象的引用计数。但是在一个对象被释放后,weak会自动将指针指向nil,而assign则不会。
|
索引 存储
|
XML 数据格式 iOS开发
|
存储 对象存储 块存储