objective-c 内存管理规范
2015-09-22 17:19
375 查看
Objective-C 内存管理规范
第一条原则
只要调用了alloc方法,必须要有对应的release方法,并且谁alloc,谁release第二条原则
对于set方法,如果成员变量是基本数据类型,那么直接赋值即可。如果变量是OC对象类型,则需要注意进行内存管理。
第三条原则
dealloc方法中,一定要进行[super dealloc],并且将它放在dealloc方法的最后一句。如果当前对象拥有一些OC对象,则要注意对其他队形进行release。一个例子
Person.h
#import <Foundation/Foundation.h> #import "Book.h" @interface Person : NSObject { Book * _book; } - (void) setBook:(Book *) book; - (Book *)book; - (void) dealloc; @end
Person.m
#import "Person.h" @implementation Person /* 这一部分是进行内存管理的标准写法 */ - (void)setBook:(Book *)book { if (book != _book) { //对于当前旧对象的计数器减1 [_book release]; _book = [book retain]; } } - (Book *)book { return _book; } - (void)dealloc { //不能忘记释放当前对象所拥有的其他对象。 [_book release]; NSLog(@"Person dealloc..."); [super dealloc]; } @end
Book.h
#import <Foundation/Foundation.h> @interface Book : NSObject { int _price; } - (void) setPrice:(int) price; - (int) price; - (void) dealloc; @end
Book.m
#import "Book.h" @implementation Book - (void)setPrice:(int)price { _price = price; } - (int)price { return _price; } - (void)dealloc { NSLog(@"Book dealloc..."); [super dealloc]; } @end
main.m
#import <Foundation/Foundation.h> #import "Book.h" #import "Person.h" int main(int argc, const char * argv[]) { @autoreleasepool { Person *p = [[Person alloc] init]; Book *b1 = [[Book alloc] init]; Book *b2 = [[Book alloc] init]; [p setBook:b1]; [p setBook:b2]; [b1 release]; b1 = nil; [b2 release]; b2 = nil; [p release]; p = nil; } return 0; }
相关文章推荐
- Objective-C入门17:KVC
- 转载Xcode7编译遇到linking in object file built for OSX, for architecture x86_64问题解决方案
- ZwMakeTemporaryObject
- Objective-C-一个简单的类
- Objective-C------NSDictionary、NSMutableDictionary字典对象用法总结
- Objective-C入门16:内存管理
- 【IOS 开发学习总结-OC-14】★★★objective-c面向对象之——KVO(键值监听)
- Objective-c正确的写法单身
- Objective-C-------NSDictionay按照字母的顺序显示字典中的内容
- Spring中的jdbcTemplate.queryForObject()使用
- webservice调用报object is not an instance of declaring class错
- C++ 11 - STL - 函数对象(Function Object) (上)
- Objective-C之数据持久化-SQLite
- Objective-C之数据持久化-对象归档
- JSONObject简介
- MyBatis中对List<Object> 对象List的批处理插入操作
- Android项目中如果json字符串中key-value顺序很重要,不要使用Android自带的JSONObject
- Objective-C类型推断
- Objective-C Block闭包概念解析
- 2015 Objective-C 三大新特性