zoukankan      html  css  js  c++  java
  • 一些属性修饰词的使用

    strong,weak, unsafe_unretained往往都是用来声明属性的,如果想声明临时变量就得用__strong,  __weak, __unsafe_unretained,  __autoreleasing, 其用法与上面介绍的类似。

    __autoreleasing的用法介绍:

    在c/c++,objective-c内存管理中有一条是:谁分配谁释放。 __autoreleasing则可以使对像延迟释放。比如你想传一个未初始化地对像引用到一个方法当中,在此方法中实始化此对像,那么这种情况将是__autoreleasing表演的时候。看个示例:

    1. - (void) generateErrorInVariable:(__autoreleasing NSError **)paramError{   
    2.     NSArray *objects = [[NSArray alloc] initWithObjects:@"A simple error", nil];  
    3.     NSArray *keys = [[NSArray alloc] initWithObjects:NSLocalizedDescriptionKey, nil];  
    4.     NSDictionary *errorDictionary = [[NSDictionary alloc] initWithObjects:objects forKeys:keys];  
    5.     *paramError = [[NSError alloc] initWithDomain:@"MyApp" code:1 userInfo:errorDictionary];  
    6. }  
    7. -(void)test  
    8. {  
    9.     NSError *error = nil;   
    10.     [self generateErrorInVariable:&error];  
    11.     NSLog(@"Error = %@", error);  
    12. }  

    这样即便在函数内部申请的空间,在函数外部也可以使用,同样也适合谁分配谁释放的原则。

    同样下面的代码也是类似原因, 只不过在没有开启ARC的情况下适用:

    1. -(NSString *)stringTest  
    2. {  
    3.     NSString *retStr = [NSString stringWithString:@"test"];  
    4.       
    5.     return [[retStr retain] autorelease];  
    6. }  


    开启ARC后,应改为:

      1. -(NSString *)stringTest  
      2. {  
      3.     __autoreleasing NSString *retStr = [NSString alloc] initWithString:@"test"];  
      4.       
      5.     return retStr;  
      6. }  
  • 相关阅读:
    前端笔记-jquery
    git的使用
    前端笔记-bom
    微信小程序没找到构建npm或者没找到node_modules目录
    微信小程序判断 wx:if wx:else
    微信小程序提示云函数部署不成功
    cmd如何进入文件夹
    微信小程序view居中
    vue页面跳转兄弟组件传值
    vue全局变量apiurl
  • 原文地址:https://www.cnblogs.com/wskgjmhh/p/4756430.html
Copyright © 2011-2022 走看看