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
时间: 2024-08-22 02:22:24

oc51--循环retain的相关文章

[email&#160;protected]和循环retain

@class 什么是@class?如何使用@class? @class可以简单地引用一个类 @class具体使用: 在.h文件中使用@class引用一个类 在.m文件中使用#import包含这个类的.h文件 #import 和@class的区别 import是一个预编译指令, 他会将""中的文件拷贝到import所在的位置,并且import有一个特点, 只要""中的文件发生了变化, 那么import就会重新拷贝一次(更新操作) @class仅仅是告诉编译器, @cl

七.OC基础加强--1.内存管理 2.野指针,内存泄露 3.set方法的内存管理 [email&#160;protected]参数 [email&#160;protected]和循环retain的使用 6.NSString的内存管理

1,内存管理简单介绍 1,为什么要有内存管理? malloc selloc dealloc```需要回头复习 一般的内存 4s 是512m内存:6 是1024m内存: 当内存过大时,会耗尽内存.出现程序闪退. 2.OC内存管理的范围 : 管理任何继承NSObject的对象,对其他的基本数据类型无效. 3.对象类型是程序运行过程中动态分配的,存储在堆区:内存管理主要是对 堆区中的对象的内存管理. 4.OC内存管理的原理 为了防止内存泄露 对象的引用计数器 : 每个OC对象都有自己的引用计数器,是一

[email&#160;protected],循环retain

2个对象互相有着引用,A中有B,B中有A. // 对于循环retain的情况,对象不能够释放,此时只能让一方使用assign一方使用retain,retain用于对象assign用于基本类型,assign时对cat的引用不会使cat对象计数器加1 Cat.h #import <Foundation/Foundation.h> @class Girl; @interface Cat : NSObject @property (nonatomic,copy)NSString *name; @pro

iOS开发——面试篇&amp;OC基本语法总结(面试)

OC基本语法总结(面试) C和OC对比 OC中主要开发在什么平台上的应用程序? 答:可以使用OC开发Mac OS X平台和iOS平台的应用程序 OC中新增关键字大部分是以什么开头? 答:OC中新增关键字大部分是以@开头 OC中新增加了那些数据类型? 答: Block类型 指针类型(Class, id类型) 空类型 特殊类型(SEL, nil) 面向对象特性是什么? 答:继承性,封装性,多态性 import和#include有什么区别? 答:import 的功能和 include一样, 是将右边的

黑马程序员-------Objective-C基础3

------ android培训.java培训.期待与您交流! ---------- 1.OC内存管理 1)范围:管理任何继承NSObject的对象,对其他的基本数据类型无效(堆区),否则会造成内存泄露 2)原理:任何对象都可能有用一个或多个所有者,只要一个对象至少还拥有一个所有者,它就会继续存在 3)对象的引用计数器,retain(+1).release(-1).retainCount得到引用计数器的值 4)内存管理的分类:MRC(手动管理).ARC(自动管理).垃圾回收(不支持) 2.引用计

ASIHTTPRequest中文入门教程全集 http://www.zpluz.com/thread-3284-1-1.html

本文转载至 目录  3 第  1  章  创建和运行请求  5 1.1.  创建一个同步请求  5 1.2.  创建一个异步请求  5 1.3.  使用程序块(blocks )  6 1.4.  使用队列  6 1.5.  在委托方法中处理多个请求的成功和失败  7 1.6.  关于ASINetworkQueues  7 1.7.  取消一个异步请求  8 1.8.  安全处理委托在请求完成前释放的情况  8 第  2  章  发送数据  10 2.1.  发送请求头  10 2.2.  用AS

OC 内存管理:MRC与ARC

内存中的五大区域: 栈区,堆区,BBS段,数据段和代码段,其中除了堆区以外,其他区域的内存管理由系统自行回收 OC对象是存储在堆区的,所以OC的内存管理主要是对”堆区中的OC对象”进行管理 内存管理中的几个概念: ->引用计算器:既retainCount,每个OC对象内部都有1个8字节空间用来存储retainCount,表示有多少”人”正在使用; 对象刚被创建时,默认计数值就为1,当计数值为0时,系统会自动调用dealloc方法将对象销毁 引用计数器的用法:给对象发送相应的技术操作来改变计数器的

iOS笔试题04

1. Object-C有多继承吗?没有的话用什么代替?? 1> OC是单继承,没有多继承 2> 有时可以用分类category和协议protocol来代替多继承 2. Object-C有私有方法吗?私有变量呢?? 1> OC没有类似@private的修饰词来修饰方法,只要写在.h文件中,就是公共方法 2> 可以使用类扩展(Extension)/继承来增加私有方法和私有变量 3. 关键字const什么含义? const int a; int const a; const int *a

编写高质量代码-OC 第5章 实现

33.使用类别把类的实现拆分成不同的文件 1.利用类别机制,可将同一个类的实现,由一个常规的实现文件(.m)拆分成多个实现文件(.m) 2.把同一个类的实现文件(.m)拆分成多个实现文件(.m),适合类的实现文件大多比较庞大. 3.把同一个类的实现文件(.m)拆分成多个实现文件(.m),拆分的标准多是以同类型或同业务类型等来作为参照. 34.明智地使用内省可使程序更加高效和健壮 1.内省是对象揭示自己作为一个运行时对象的详细信息的一种能力,这些详细信息包括对象在继承树上的位置,对象是否遵循特定的