iOS setValue和setObject的區別

來源:互聯網
上載者:User

標籤:auto   str   ios   代碼   一個   tail   注意   區別   table   

在使用NSMutableDictionary的時候經常會使用setValue forKey與setObject forKey,他們經常是可以互動使用的,代碼中經常每一種的使用都有。
1.先看看setValue: forKey:的定義


 

擴充NSMutableDictionary的一個類別,上面注釋說的很清楚,發送setObject:forKey 給接收者,也就是調用setObject:forKey方法,除非value為nil的時候,調用方法removeObject:forKey

2.看看setObject:forKey:的定義


 

注意:setObject:forKey:中Key的對象是一個id類型,並不是NSString,只不過我們經常使用NSString而已。

3.總結兩者的區別:

  1. setObject:forked:中object是不能夠為nil的,不然會報錯。
    setValue:forKey:中value能夠為nil,但是當value為nil的時候,會自動調用removeObject:forKey方法
  2. setValue:forKey:中key的參數只能夠是NSString類型,而setObject:forKey:的可以是任何類型

注意:setObject:forKey:對象不能存放nil要與下面的這種情況區分:

  1. [imageDictionary setObject:[NSNullnull] forKey:indexNumber];
    [NSNull null]表示的是一個Null 物件,並不是nil,注意這點
  2. setObject:forKey:中Key是NSNumber對象的時候,如下:
    [imageDictionary setObject:obj forKey:[NSNumber numberWithInt:10]];
  3. 上面說的區別是針對調用者是dictionary而言的。setObject:forKey:方法NSMutabledictionary特有的,而setValue:forKey:方法是KVC(鍵-值編碼)的主要方法。
  4. setValue:forKey:方法調用者是對象的時候: setValue:forKey:方法是在NSObject對象中建立的,也就是說所有的oc對象都有這個方法,所以可以用於任何類。

4.使用:

SomeClass *someObj = [[SomeClass alloc] init];[someObj setValue:self forKey:@"delegate"];

表示的意思是:對象someObj設定他的delegate屬性的值為當前類,當然調用此方法的對象必須要有delegate屬性才能設定,不然調用了也沒效果。

原文地址:http://blog.csdn.net/itianyi/article/details/8661997


連結:http://www.jianshu.com/p/8c9d31333b34

iOS setValue和setObject的區別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.