Objective-C内存管理教程和原理剖析(三)
来源:互联网 发布:软件管家官网 编辑:程序博客网 时间:2024/05/21 21:41
@property (retain)和@synthesize的默认实现
在这里解释一下@property (retain) ClassB* objB;和@synthesize objB;背后到底发生了什么(retain property的默认实现)。property实际上是getter和setter,针对有retain参数的property,背后的实现如下(请参考附件中的memman-getter-setter.m,你会发现,结果和memman-property.m一样):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@interface ClassA : NSObject
{
ClassB *objB;
}
-(ClassB *) getObjB;
-(void) setObjB:(ClassB *) value;
@end
@implementation ClassA
-(ClassB*) getObjB
{
return objB;
}
-(void) setObjB:(ClassB*) value
{
if (objB != value)
{
[objB release];
objB = [value retain];
}
}
在setObjB中,如果新设定的值和原值不同的话,必须要把原值对象release一次,这样才能保证retain count是正确的。
由于我们在class内部retain了一次(虽然是默认实现的),所以我们要在dealloc方法中release这个成员变量。
1
2
3
4
5
-(void) dealloc
{
[objB release];
[super dealloc];
}
示例代码文件链接:http://files.cnblogs.com/VinceYuan/objective-c-memman.zip
0 0
- Objective-C内存管理教程和原理剖析(三)
- Objective-C内存管理教程和原理剖析(三)
- Objective-C内存管理教程和原理剖析(一)
- Objective-C内存管理教程和原理剖析(二)
- Objective-C内存管理教程和原理剖析(四)
- iPhone/Mac Objective-C内存管理教程和原理剖析(三)
- Objective-C内存管理教程和原理剖析(三)@property (retain)和@synthesize的默认实现
- Objective-C内存管理教程和原理剖析(三)@property (retain)和@synthesize的默认实现
- Objective-C内存管理教程和原理剖析(三)@property (retain)和@synthesize的默认实现
- iPhone/Mac Objective-C内存管理教程和原理剖析
- iPhone/Mac Objective-C内存管理教程和原理剖析
- iPhone/Mac Objective-C内存管理教程和原理剖析
- Objective-C内存管理教程和原理剖析
- iPhone/Mac Objective-C内存管理教程和原理剖析
- iPhone/Mac Objective-C内存管理教程和原理剖析
- iPhone/Mac Objective-C内存管理教程和原理剖析
- Objective-C内存管理教程和原理剖析
- iPhone/Mac Objective-C内存管理教程和原理剖析
- 在ASP.NET使用javascript的一点小技巧
- 全文本检索的应用
- Objective-C内存管理教程和原理剖析(二)
- 设备对象结构
- 学习IP4
- Objective-C内存管理教程和原理剖析(三)
- Objective-C内存管理教程和原理剖析(四)
- leetcode Valid Sudoku & Sudoku Solver
- c++虚函数解析【转自陈皓的专栏】
- sqlplus: error while loading shared libraries: /opt/oracle/product/OraHome/lib/libclntsh.so.11.1: ca
- linux系统如何启动第一个应用程序--构建根文件系统
- Tomcat:IOException while loading persisted sessions: java.io.EOFException解决手记
- poj 2185 Milking Grid
- nyoj 832合并游戏(状态压缩+记忆化搜索)