WEB开发网
开发学院手机开发iPhone 开发 iPhone/Mac Objective-C内存管理教程和原理剖析 阅读

iPhone/Mac Objective-C内存管理教程和原理剖析

 2010-05-29 05:52:00 来源:WEB开发网   
核心提示:ClassA *obj2 = obj1;[obj2 retain];//do something[obj2 release];obj2 = nil;2.5 在一个函数中创建并返回对象,需要把这个对象设置为autoreleaseClassA *Func1(){ClassA *obj = [[[ClassA alloc]i

ClassA *obj2 = obj1;

[obj2 retain];

//do something

[obj2 release];

obj2 = nil;

2.5 在一个函数中创建并返回对象,需要把这个对象设置为autorelease

ClassA *Func1()

{

ClassA *obj = [[[ClassA alloc]init]autorelease];

return obj;

}

2.6 在子类的dealloc方法中调用基类的dealloc方法

-(void) dealloc

{

[super dealloc];

}

2.7 在一个class中创建和使用property。

2.7.1 声明一个成员变量。

ClassB *objB;

2.7.2 声明property,加上retain参数。

@property (retain) ClassB* objB;

2.7.3 定义property。(property的默认实现请看第三章)

@synthesize objB;

2.7.4 除了dealloc方法以外,始终用.操作符的方式来调用property。

self.objB 或者objA.objB

2.7.5 在dealloc方法中release这个成员变量。

[objB release];

示例代码如下(详细代码请参考附件中的memman-property.m,你需要特别留意对象是在何时被销毁的。):

@interface ClassA : NSObject

{

ClassB* objB;

}

@property (retain) ClassB* objB;

@end

@implementation ClassA

@synthesize objB;

-(void) dealloc

{

[objB release];

[super dealloc];

}

@end

2.7.6 给这个property赋值时,有手动release和autorelease两种方式。

void funcNoAutorelease()

{

ClassB *objB1 = [[ClassB alloc]init];

ClassA *objA = [[ClassA alloc]init];

objA.objB = objB1;

[objB1 release];

[objA release];

}

void funcAutorelease()

{

ClassB *objB1 = [[[ClassB alloc]init] autorelease];

ClassA *objA = [[[ClassA alloc]init] autorelease];

objA.objB = objB1;

上一页  1 2 3 4 5 6 7 8  下一页

Tags:iPhone Mac Objective

编辑录入:coldstar [复制链接] [打 印]
赞助商链接