• iOS7 CookBook精彩瞬间(一)property、selector细节、__unused


    1.我们常常使用nonatomic,很多人只知道它的效率较高,却不知道其含义,其含义是非线程安全的,也就是说多线程修改时不加锁,可能出现多个线程先后修改而成为脏数据的情况。

    2.unsafe_unretained和assign的作用是一致的,如果对象数据也采用这种方式,这个property就只是指向数据的指针而已,这样说来,似乎assign和weak是一样的,但他们有个很大的区别,在下一条中说明。

    3.weak也只是指向数据而不retain,但是当weak指针指向的数据释放后,weak指针自动变为nil,而assign的不会。

    4.copy和strong作用一致,但是系统会以拷贝的方式来生成新对象,copy常用于NSString等对象,注意要实现copy必须遵循NSCopying或者NSMutableCopying协议。有关NSString为何使用copy的深入探讨请看来自CocoaChina的文章:

    NSString属性什么时候用copy,什么时候用strong?

    5.方法名是selector用来查找方法的标识,它由method name和external name组成,而不包括internal part。

    例如下面的方法

    - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
    其中method name为tableView,external name为canEditRowAtIndexPath,internal part包括对象类型和对象名,因此方法名应该描述为:tableView:canEditRowAtIndexPath:。

    利用这一点,可以方便很多事情,例如我们拖线实现按钮的点击事件时,默认生成的方法如下:

    我们需要先强转类型为UIButton*再进一步操作。

    - (IBAction)btnClick:(id)sender {
        
       __unused UIButton *btn = (UIButton *)sender;
        
    }
    我们知道方法名并不包括对象类型和对象名,因此我们可以直接修改如下:

    - (IBAction)btnClick:(UIButton *)btn {
        
    }
    这样可以避免一系列的不必要操作。

    6.我们定义了变量后,如果不使用就会出现警告,如果在变量前加__unused前缀,就可以免除警告。其原理是告诉编译器,如果变量未使用就不参与编译。

    7.对于协议中的变量和方法,默认是@required,并且对于变量,必须要重新用property定义。


  • 相关阅读:
    Beanshell 创建全局变量(跨线程组)
    Beanshell 将外部文件导入到jmeter中使用
    session 、cookie、token的区别及联系
    Fiddler Everywhere 结合了postman和fiddler的抓包神器
    jmeter+ant+jenkins接口自动化测试框架
    虚拟机 VMware Workstation Pro 15.5.0 及永久激活密钥
    Mysql--编译安装5.6版本
    Mysql--调优
    Nginx--调优
    ulimit
  • 原文地址:https://www.cnblogs.com/aiwz/p/6154035.html
Copyright © 2020-2023  润新知