您的位置:首页 > 移动开发 > IOS开发

【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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: