iOS開發(fā)小總結(jié)(二)

謂詞的使用

謂詞就是通過NSPredicate給定的邏輯條件作為約束條件,完成對(duì)數(shù)據(jù)的篩選。
  • 定義謂詞對(duì)象,謂詞對(duì)象中包含了過濾條件
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age<%d",30];
  • 使用謂詞條件過濾數(shù)組中的元素,過濾之后返回查詢的結(jié)果
    NSArray *array = [persons filteredArrayUsingPredicate:predicate];
  • 可以使用&&進(jìn)行多條件過濾
    predicate = [NSPredicate predicateWithFormat:@"name='1'&& age > 40"];
    array = [persons filteredArrayUsingPredicate:predicate];
  • 包含語句的使用
    predicate = [NSPredicate predicateWithFormat:@"self.name IN {'1','2','4'} || self.age IN {30,40}"];
  • 指定字符開頭和指定字符結(jié)尾,是否包含指定字符
    //name以a開頭
    predicate = [NSPredicate predicateWithFormat:@"name BEGINSWITH 'a'"];
    //name以ba結(jié)尾
    predicate = [NSPredicate predicateWithFormat:@"name ENDSWITH 'ba'"];
    //name中包含字符a
    predicate = [NSPredicate predicateWithFormat:@"name CONTAINS 'a'"];
  • like 進(jìn)行匹配多個(gè)字符
    //name中只要有s字符就滿足條件
    predicate = [NSPredicate predicateWithFormat:@"name like 's'"];
    //?代表一個(gè)字符 下面的查詢條件是:name中第二個(gè)字符是s的
    predicate = [NSPredicate predicateWithFormat:@"name like '?s'"];

atomic 和nonatomic的區(qū)別

  • atomic提供多線程安全,防止讀寫未完成的時(shí)候被另外一個(gè)線程讀寫、造成數(shù)據(jù)錯(cuò)誤
  • nonatomic在自己管理內(nèi)存的環(huán)境中,解析的訪問器保留并自動(dòng)釋放返回值,若指定了nonatomic,那么訪問器只是簡單的返回這個(gè)值
  • 使用atomic不是一定的線程安全,速度也比nonatomic慢

nil、Nil、NULL、NSNull區(qū)別

  • nil和C語言的NULL相同,在objc/objc.h中定義。nil表示Objective-C對(duì)象的值為空。在
    C語言中,指針的空值用NULL表示。在Objective-C中,nil對(duì)象調(diào)用任何方法表示什
    么也不執(zhí)行,也不會(huì)崩潰。
  • Nil:那么對(duì)于我們Objective-C開發(fā)來說,Nil也就代表((void *)0)。但是它是用于代表空
    類的. 比如:Class myClass = Nil;
  • NULL: 在C語言中,NULL是無類型的,只是一個(gè)宏,它代表空. 這就是在C/C++中的
    空指針。對(duì)于我們Objective-C開發(fā)來說,NULL就表示((void*)0).
  • NSNull:NSNull是繼承于NSObject的類型。它是很特殊的類,它表示是空,什么也不
    存儲(chǔ),但是它卻是對(duì)象,只是一個(gè)占位對(duì)象。使用場景就不一樣了,比如說服務(wù)端接 又中讓我們在值為空時(shí),傳空。NSDictionry *parameters = @{@"arg1" :
    @"value1",@"arg2" : arg2.isEmpty ? [NSNull null] : arg2};
  • NULL、nil、Nil這三者對(duì)于Objective-C中值是一樣的,都是(void *)0,那么為什么要
    區(qū)分呢?又與NSNull之間有什么區(qū)別:
  • NULL是宏,是對(duì)于C語言指針而使用的,表示空指針
  • nil是宏,是對(duì)于Objective-C中的對(duì)象而使用的,表示對(duì)象為空
  • Nil是宏,是對(duì)于Objective-C中的類而使用的,表示類指向空
  • NSNull是類類型,是用于表示空的占位對(duì)象,與JS或者服務(wù)端的null類似的含意
fighting.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容