• 一些属性修饰词的使用


    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. }  
  • 相关阅读:
    check2
    LYF模板连接.txt
    mvc中的表现和数据分离怎么理解?
    node中websocket的使用
    vue随笔
    python安装Django常见错误
    node中的session的使用
    为什么很多IT公司不喜欢进过培训机构的人呢
    vue数据交互
    vuecli的服务代理
  • 原文地址:https://www.cnblogs.com/wskgjmhh/p/4756430.html
Copyright © 2020-2023  润新知