zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    洛谷P3275 [SCOI2011]糖果
    2018年12月30&31日
    洛谷P4114 Qtree1
    洛谷P4116 Qtree3
    洛谷P4315 月下“毛景树”
    洛谷P1505 [国家集训队]旅游
    洛谷P2253 好一个一中腰鼓!
    CF616D Longest k-Good Segment
    洛谷P3979 遥远的国度
    洛谷P2486 [SDOI2011]染色
  • 原文地址:https://www.cnblogs.com/yaowen/p/7428389.html
Copyright © 2011-2022 走看看