【ios】(ARC) 使用ARC的注意事项总结
2012-11-09 17:22
459 查看
1、不能使用retain
#****原来
- (id)initWithName:(NSString *newName){
self = [super init];
if (self){
name=[newName retain];
}
return self;
}
#*****ARC
- (id)initWithName:(NSString *)newName{
self=[super init];
if (self) {
name=newName;
}
return self;
}
2、关键字
a、_strong
Strong 具有对对象的持有
b、-weak
Week 不具有对象的持有 可以使用 当该对象的持有着nil后 week使用的对象会赋值为nil
NSString *firstName = [[NSString alloc] initWithString:@"first"];
_weak NSString *weakName = firstName;
_strong、_week
如果对象之前就没有持有者,就会出现刚创建里就被迫弃的问题
NSString _weak *string = [[NSString alloc] initWithFormat:@"FirstName"];
NSLog(@"name:%@",string);// 此时 string为空
c、_unsafe_unretained
和weak都是弱参照
区别:_weak:对象没有持有者 赋值nil
_unsafe_unretained: 对象没有持有者 内存对象没有了 地址还存在 访问是[BAD_ACCESS]错误
d、_autoreleasing
延迟释放
{
NSError *error = nil;
[self generateErrorInVariable:&error];
NSLog(@"Error = %@",error);
}
- (void) generateErrorInVariable:(__autoreleasing NSError **)paramError {
paramError = [[NSError alloc] initWithDomain:@"MyApp" code:1 userInfo:errorDictionary];
}
------------------
- (NSString *) stringTest
{
_autoreleasing NSString *retStr = [NSString alloc] initWithString:@"firstName"];
return retStr;
}
总结:
1、代码中不可以使用retain 、release、autorelese;
2、不能重载dealloc (如果是释放对象内存以外的处理,是可以重载函数的,但是不可以调用[super delloc]);
3、不能使用NSAllocateObject、NSDeallocateObject
4、不能在c结构体中使用对象指针
5、id与void 间的如果cast是需要用特定的方法(_bridge关键字)
6、不能使用NSAutoReleasePool、而需要@autoreleasepool块
7、不能使用“new”开始的属性名称
(错误:如果使用会出现错误
Property's systhesized getter follows Cocoa naming convention for returning "owned" objects
)
guanhuiwit
#****原来
- (id)initWithName:(NSString *newName){
self = [super init];
if (self){
name=[newName retain];
}
return self;
}
#*****ARC
- (id)initWithName:(NSString *)newName{
self=[super init];
if (self) {
name=newName;
}
return self;
}
2、关键字
a、_strong
Strong 具有对对象的持有
b、-weak
Week 不具有对象的持有 可以使用 当该对象的持有着nil后 week使用的对象会赋值为nil
NSString *firstName = [[NSString alloc] initWithString:@"first"];
_weak NSString *weakName = firstName;
_strong、_week
如果对象之前就没有持有者,就会出现刚创建里就被迫弃的问题
NSString _weak *string = [[NSString alloc] initWithFormat:@"FirstName"];
NSLog(@"name:%@",string);// 此时 string为空
c、_unsafe_unretained
和weak都是弱参照
区别:_weak:对象没有持有者 赋值nil
_unsafe_unretained: 对象没有持有者 内存对象没有了 地址还存在 访问是[BAD_ACCESS]错误
d、_autoreleasing
延迟释放
{
NSError *error = nil;
[self generateErrorInVariable:&error];
NSLog(@"Error = %@",error);
}
- (void) generateErrorInVariable:(__autoreleasing NSError **)paramError {
paramError = [[NSError alloc] initWithDomain:@"MyApp" code:1 userInfo:errorDictionary];
}
------------------
- (NSString *) stringTest
{
_autoreleasing NSString *retStr = [NSString alloc] initWithString:@"firstName"];
return retStr;
}
总结:
1、代码中不可以使用retain 、release、autorelese;
2、不能重载dealloc (如果是释放对象内存以外的处理,是可以重载函数的,但是不可以调用[super delloc]);
3、不能使用NSAllocateObject、NSDeallocateObject
4、不能在c结构体中使用对象指针
5、id与void 间的如果cast是需要用特定的方法(_bridge关键字)
6、不能使用NSAutoReleasePool、而需要@autoreleasepool块
7、不能使用“new”开始的属性名称
(错误:如果使用会出现错误
Property's systhesized getter follows Cocoa naming convention for returning "owned" objects
)
guanhuiwit
相关文章推荐
- UIScrollView的基本使用方法和注意事项 - iOS - UI基础知识总结10
- iOS开发自动释放池@autoreleasepool的使用注意事项以及ARC机制——面试必考内容
- iOS ARC的使用注意事项
- iOS ARC使用时注意事项以及报错解决方法
- iOS开发中一些重要的系统方法使用注意事项总结
- iOS中使用ARC的注意事项
- 【iOS开发-34】自动释放池@autoreleasepool的使用注意事项以及ARC机制——面试必考内容
- iOS ARC的使用注意事项
- 【iOS开发-34】自己主动释放池@autoreleasepool的使用注意事项以及ARC机制——面试必考内容
- iOS开发-Delegate 代理 使用和注意事项
- MySQL索引类型总结和使用技巧以及注意事项
- iOS 关于调整状态栏方向方法setStatusBarOrientation的使用注意事项
- ARC内存使用注意事项
- MySQL索引类型总结和使用技巧以及注意事项
- ARC内存使用注意事项
- webview使用总结及注意事项
- MySQL索引类型总结和使用技巧以及注意事项
- Spring中使用@Value读取porperties文件中的属性值方法总结及注意事项
- MySQL索引类型总结和使用技巧以及注意事项