09. 属性的Attribute
来源:互联网 发布:中国第一美女程序员 编辑:程序博客网 时间:2024/05/16 05:40
内存管理
对象所有权政策 Object Onwership Policy
任何一个对象都有一定数量的所有者,当一个对象有至少一个所有者时,这个对象就会存在,如果一个对象没有所有者,也就是一个没有任何其他对象需要用这个对象,则这个对象就被系统销毁 ->调用dealloc方法
……
autorelease / NSAutoreleasePool
调用autorelease方法可在一段时间之后撤销所有权。
实质上,调用autorelease方法时,该对象会进入到一个自动释放池中。
什么时候撤销所有权?:当这个自动释放池接收到drain的消息时。
当一个自动释放池接收到drain消息时
1. 会调用池中所有对象的release方法。
2. 如果一个对象被两次加进同一个池中,则该对象此事会被池调用2次release.
3. 调用自动释放池的drain方法如同调用release方法,但一般都会写前者。
自动释放池可以被创建多个,如下:
NSAutoreleasePool pool = [[NSAutoreleasePool alloc] init]; //比较旧的方法
所有的自动释放池都会被放入到一个栈里。
属性访问器
property / synthesize / dot syntax
@property (属性的属性/Attribute of property) 实例变量类型 实例变量;
//// TRComputer.h// day04-1////#import <Foundation/Foundation.h>#import "TRCpu.h"#import "TRMem.h"@interface TRComputer : NSObject@property(nonatomic, retain) TRCpu* cpu;@property(nonatomic, retain) TRMem* mem;-(void)playGame;-(id)initWithCpu:(TRCpu*)cpu andMem:(TRMem*)mem;+(id)computerWithCpu:(TRCpu*)cpu andMem:(TRMem*)mem;@end//// TRComputer.m// day04-1////#import "TRComputer.h"@implementation TRComputer-(id)initWithCpu:(TRCpu *)cpu andMem:(TRMem *)mem{ if (self = [super init]) { self.cpu = cpu; self.mem = mem; } return self;}+(id)computerWithCpu:(TRCpu *)cpu andMem:(TRMem *)mem{ return [[[TRComputer alloc]initWithCpu:cpu andMem:mem]autorelease];}-(void)playGame{ NSLog(@"playGame CPU: %dGHZ Mem: %dGB size", self.cpu.hz, self.mem.size);}-(void)dealloc{ NSLog(@"computer cpu:%dHZ mem:%dGB销毁了", self.cpu.hz, self.mem.size); [self.cpu release]; [self.mem release]; [super dealloc];}@end//// TRCpu.h// day04-1////#import <Foundation/Foundation.h>@interface TRCpu : NSObject@property(nonatomic, assign) int hz;-(id)initWithHz:(int)hz;+(id)cpuWithHz:(int)hz;@end//// TRCpu.m// day04-1//// Created by tarena on 14-3-20.// Copyright (c) 2014年 tarena. All rights reserved.//#import "TRCpu.h"@implementation TRCpu-(id)initWithHz:(int)hz{ if (self = [super init]) { self.hz = hz; } return self;}+(id)cpuWithHz:(int)hz{ return [[[TRCpu alloc]initWithHz:hz]autorelease];}-(void)dealloc{ NSLog(@"cpu %d销毁了", self.hz); [super dealloc];}@end//// TRMem.h// day04-1//// Created by tarena on 14-3-20.// Copyright (c) 2014年 tarena. All rights reserved.//#import <Foundation/Foundation.h>@interface TRMem : NSObject@property(nonatomic, assign)int size;-(id)initWithSize:(int)size;+(id)memWithSize:(int)size;@end//// TRMem.m// day04-1//// Created by tarena on 14-3-20.// Copyright (c) 2014年 tarena. All rights reserved.//#import "TRMem.h"@implementation TRMem-(id)initWithSize:(int)size{ if (self = [super init]) { self.size = size; } return self;}+(id)memWithSize:(int)size{ return [[[TRMem alloc]initWithSize:size]autorelease];}-(void)dealloc{ NSLog(@"mem %d销毁了", self.size); [super dealloc];}@end//// main.m// day04-1//// Created by tarena on 14-3-20.// Copyright (c) 2014年 tarena. All rights reserved.//#import <Foundation/Foundation.h>#import "TRComputer.h"int main(int argc, const char * argv[]){ @autoreleasepool { TRCpu* cpu1 = [TRCpu cpuWithHz:1]; TRMem* mem1 = [TRMem memWithSize:2]; TRComputer* computer = [TRComputer computerWithCpu:cpu1 andMem:mem1]; computer.cpu = cpu1; computer.mem = mem1; [computer playGame]; TRCpu* cpu2 = [TRCpu cpuWithHz:2]; TRMem* mem2 = [TRMem memWithSize:8]; computer.cpu = cpu2; computer.mem = mem2; [computer playGame]; } return 0;}
0 0
- 09. 属性的Attribute
- C# attribute属性的例子
- 与IDE相关的Attribute属性(C#)
- 一个自定义属性(Attribute)的Demo
- 属性(Attribute)资源的使用:自定义组件
- struts-config中action 的attribute属性与name属性
- TargetType 属性 (Property) 和 x:Key 属性 (Attribute) 的关系
- 常用属性(Attribute)
- attribute属性介绍
- structs中的attribute属性
- Attribute Certificate-属性证书
- .net中属性Attribute
- structs中的attribute属性
- Attribute属性设置
- Android自定义属性attribute
- 54. Attribute isId 属性
- 55. Attribute name 属性
- 56. Attribute value 属性
- Error: Can't place multiple pins assigned to pin location Pin_114 (IOPAD_X47)
- linux主机配置DNS服务器方法
- UVA 11020 Efficient Solutions(C++STL应用)
- linux每日一餐 - 开篇
- Ngnix Virtul Host 和 rewrite rule 示例
- 09. 属性的Attribute
- html之<marquee>详解
- JQuery的KinSlideshow插件打造超炫焦点轮播图,带参数说明
- Spring AOP Maven依赖,拦截加注解的方法参数
- UVa 371 - Ackermann Functions
- Ubuntu 12.04下安装Oracle Express 11gR2
- Linux 下配置Tinyxml,将其编译为静态库
- 修改wheelView,全部代码
- ubuntu中如何获取root权限