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. }  
  • 相关阅读:
    asp.net mvc本地程序集和GAC的程序集冲突解决方法
    SolrCloud-如何在.NET程序中使用
    Application Initialization Module for IIS 7.5
    CentOS 6.5/6.6 安装mysql 5.7 最完整版教程
    NHibernate one-to-one
    “Invalid maximum heap size” when running Maven
    初涉RxAndroid结合Glide实现多图片载入操作
    【案例分析】Linux下怎样查看port占用情况
    js学习之--Bootstrap Modals(模态框)
    sdut2852 小鑫去爬山9dp入门)
  • 原文地址:https://www.cnblogs.com/wskgjmhh/p/4756430.html
Copyright © 2011-2022 走看看