zoukankan      html  css  js  c++  java
  • 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定义。


  • 相关阅读:
    入门菜鸟
    FZU 1202
    XMU 1246
    Codeforces 294E Shaass the Great 树形dp
    Codeforces 773D Perishable Roads 最短路 (看题解)
    Codeforces 814E An unavoidable detour for home dp
    Codeforces 567E President and Roads 最短路 + tarjan求桥
    Codeforces 567F Mausoleum dp
    Codeforces 908G New Year and Original Order 数位dp
    Codeforces 813D Two Melodies dp
  • 原文地址:https://www.cnblogs.com/aiwz/p/6154035.html
Copyright © 2011-2022 走看看