//  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 ;
}
//  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

oc51--循环retain的更多相关文章

  1. 0c-33-@class,循环retain

    2个对象互相有着引用,A中有B,B中有A. // 对于循环retain的情况,对象不能够释放,此时只能让一方使用assign一方使用retain,retain用于对象assign用于基本类型,assi ...

  2. 七.OC基础加强--1.内存管理 2.野指针,内存泄露 3.set方法的内存管理 4.@property参数 5.@class和循环retain的使用 6.NSString的内存管理

    1,内存管理简单介绍 1,为什么要有内存管理? malloc selloc dealloc```需要回头复习 一般的内存 4s 是512m内存:6 是1024m内存: 当内存过大时,会耗尽内存.出现程 ...

  3. 0c-41-ARC下循环引用问题

    1.ARC下循环引入问题 一个人拥有一只狗,一只狗拥有一个主人. 当增加d.owner = p;时形成循环引用. 解决方法:一端用strong,一端用weak. 2.ARC下@property参数 A ...

  4. iOS 非ARC基本内存管理系列 3-循环retain和@class

    1.@class 使用场景:对于循环依赖关系来说,比方A类引用B类,同时B类也引用A类: 可以看出Person和Card互相引用,此时如果使用#import编译报错!因此当使用@class在两个类中相 ...

  5. 循环retian

    1.循环retian基本概念 循环retain的场景 比如A对象retain了B对象,B对象retain了A对象 循环retain的弊端 这样会导致A对象和B对象永远无法释放 循环retain的解决方 ...

  6. iOS 内存管理

    一 . 内存管理 包括内存分配 和 内存清除 1.内存管理的范围 :人和继承于NSObject类的对象都需要进行内存管理,任何非对象类型的对象(基本数据类型 如 int char float doub ...

  7. objective-c 语法快速过(6)内存管理原理

    内存管理基本原理(最重要) 移动设备的内存极其有限(iphone 4内存512M),每个app所能占用的内存是有限制的(几十兆而已). 当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不 ...

  8. iOS项目开发中的知识点与问题收集整理②(Part 二)

    1.点击UIButton 无法产生触摸事件    如果在UIImageView中添加了一个按钮,你会发现在默认情况下这个按钮是无法被点击的,需要设置UIImageView的userInteractio ...

  9. Objective-C基础3

    1.OC内存管理 1)范围:管理任何继承NSObject的对象,对其他的基本数据类型无效(堆区),否则会造成内存泄露 2)原理:任何对象都可能有用一个或多个所有者,只要一个对象至少还拥有一个所有者,它 ...

随机推荐

  1. RTL Compiler之Technology Library

    1 Target Library Design Compiler uses the target library to build a circuit. During mapping, Design ...

  2. Python语言之类

    1.一个空类 #Filename : emptyclass.py class Empty: pass e = Empty() print( e ) #<__main__.Empty object ...

  3. ajax不执行success的问题

    有时候经常会遇到ajax请求后台,然后后台返回数据后,不触发ajax的success函数的问题,归根到底,这与ajax的参数设置dataType和后台的返回值的类型有关,现总结如下: 一.后台返回值的 ...

  4. DOS批处理命令-字符串操作

    1.字符串替换 语法结构:%变量名:替换前=替换后% @set str=teh cat in teh hat @echo %str% @set str=%str:teh=the% @echo %str ...

  5. IOS7 APP 升级的10个TIP 建议

    There is no way to preserve the iOS 6 style status bar layout. The status bar will always overlap yo ...

  6. jdbcUrl is required with driverClassName错误解决

    jdbcUrl is required with driverClassName springboot2.0配置多数据源: spring.datasource.primary.url=jdbc:mys ...

  7. 思维风暴 codeforces (1060A) Phone Numbers

    这个题我真是我的问题,我看到这种题直接就想着怎么用string去枚举破解,开了一个数组去做结果模拟失败,可能开个stl容器能做的好一点...但是这个题完全不是这样做的...实际上直接比较8的个数和合法 ...

  8. mysql 数据的某个范围数据

    select * from table_name where limit num1, num2; num1 : 开始条目 num2 :选择数目

  9. windows 2013(codevs 1695)

    题目描述 Description 话说adamyi编的Windows 2013超时了(- -!),所以他不得不在自己家门口亲眼见证这个电影般的场景.虽然他不想错过这个美妙的时刻,但是他的肚子一再抗议, ...

  10. js for循环中的var与let

    var a = []; for (var i = 0; i < 10; i++) { a[i] = function () { console.log(i); }; } a[6](); 上面代码 ...