WEB开发网
开发学院手机开发iPhone 开发 apple cocoa内存管理笔记 阅读

apple cocoa内存管理笔记

 2010-12-19 07:19:24 来源:WEB开发网   
核心提示:CFStringRef str = CFStringCreateWithCharacters(...); ...CFRelease(str);andNSString *str = (NSString *)CFStringCreateWithCharacters(...); ...[str release];andNSS

CFStringRef str = CFStringCreateWithCharacters(...); ...

CFRelease(str);

and

NSString *str = (NSString *)CFStringCreateWithCharacters(...); ...

[str release];

and

NSString *str = (NSString *)CFStringCreateWithCharacters(...);

... [str autorelease];

Memory Management of Nib Objects

The File’s Owner of a nib file缺省要去释放NIB资源及顶层的对象

NIB文件的全局拥有者是全局应用对象NSApp,但是当Cocoa应用终止时,nib中的顶层对象也没有自动获得dealloc消息,因为NSApp已经被析构了。换句话说,即使nib主文件中,你也不得不管理顶层对象的内存

实际上也不用担心,mac已经有两个特征可以帮助你了

NSWindow对象有一个isReleasedWhenClosed属性,设置为YES则关闭窗口对象时自动关闭相关对象

nib文件的拥有者是一个NSWindowController对象,那么他会调用NSDocument来管理一个NSWindowController的实例,会自动释放他管理的窗口的

所以现实情况就是虽然你要负责释放一个nib文件中的 top-level对象,但是只要你的nib文件的owner是一个NSWindowController的实例,那么它会帮你释放的。如果你的一个对象加载了nib自身并且文件的拥有者并不是NSWindowController,那么你可以为nib中的对象定义outlets,这样你就可以在恰当的时候释放他们。如果你不想为每个对象都声明outlet,你也可以这样:

NSNib类的instantiateNibWithOwner:topLevelObjects: 方法来获得nib文件中的所有顶层对象

内存管理总之可以归结为:

(1)你通过带alloc,new,copy的函数创建的对象,你拥有他

(2)通过retain你可以获得拥有权

(3)任何一个对象都可能有很多个owner

(4)你拥有的对象你必须通过发送release或者是autorelease释放他们

(5)你不能释放不是你拥有的对象

(6)对set类型的赋值函数,你可以retain传入的对象,你也可以copy一份,看你自己的要求咯

(7)在函数(void)dealloc中一定要释放你声明的instance变量呀

(8)指针变量使用完了一定要设为nil

(9)你要确定一个对象不被释放掉,你最好提前retain一下

(10)在任何时候都不要直接调用dealloc

上一页  1 2 3 

Tags:apple cocoa 内存

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