国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

iOS使用containsObject容易犯的錯(cuò)誤

454398 ? 來(lái)源:it610 ? 作者:充電實(shí)踐 ? 2020-11-11 16:30 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

項(xiàng)目開(kāi)發(fā)過(guò)程中可能會(huì)有這種需求,某個(gè)可變數(shù)組不斷地增加元素,同時(shí)我們需要判斷新的元素是否已經(jīng)在數(shù)組里,如果不在才添加該元素,否則丟棄。

基于以上的需求,很容易想到使用NSArray的containsObject方法。我們先來(lái)看看官方的介紹:

- (BOOL)containsObject:(ObjectType)anObject

Parameters

anObject

An object.

Return Value

YES if anObject is present in the array, otherwise NO.

Discussion

Starting at index 0, each element of the array is passed as an argument to an isEqual: message sent to anObject until a match is found or the end of the array is reached. Objects are considered equal if isEqual: (declared in the NSObject protocol) returns YES.

對(duì)于普通的NSObject比較用isEqual:方法比較hash,而對(duì)于對(duì)于自己定義的類,直接使用containsObject會(huì)一直返回NO,原因是containsObject比較的是數(shù)組里的兩個(gè)對(duì)象,其hash值必然不一樣。比如以下自定義類:

@interface Person

@property NSString *name;

@property NSInteger age;

@end

@implementation Person

@end

Person中包含name和age,分別表示名字和年齡,數(shù)組中包含多個(gè)Person,我們的目的是,如果數(shù)組中存在同樣的人名,并且年齡完全相同,就舍棄新的Person,如何實(shí)現(xiàn)這個(gè)需求呢?我們需要重載isEqual方法

- (BOOL)isEqualToPerson:(Person *)person {

if (!person) {

return NO;

}

BOOL bIsEqualNames = (!self.name && !person.name) || [self.name isEqualToString:person.name];

BOOL bIsEqualAges = self.age == person.age;

return bIsEqualNames && bIsEqualAges;

}

#pragma mark - 重載isEqual方法

- (BOOL)isEqual:(id)object {

if (self == object) {

return YES;

}

if (![object isKindOfClass:[Person class]]) {

return NO;

}

return [self isEqualToPerson:(Person *)object];

}

通過(guò)重載后,containsObject方法就能完美實(shí)現(xiàn)我們想要的功能。那么問(wèn)題來(lái)了,像以下代碼,會(huì)存在什么問(wèn)題?

NSMutableArrray *personArray = [[NSMutableArray alloc] init] ;

...

在某個(gè)controller中初始化了數(shù)組,該controller注冊(cè)了某個(gè)通知,有其他類每隔一定時(shí)間發(fā)送通知給controller,通知里包含person對(duì)象。當(dāng)前controller收到通知后,通過(guò)containObject方法過(guò)濾重復(fù)的person,然后保存到personArray 中。

通知的處理函數(shù)如下:

-(void)didReceiveNotification:(id)sender

{

...

Person *newPerson = [[sender userInfo] objectFor:@"person" ];//此處取出通知中的person對(duì)象

...(做一些其他運(yùn)算)

if(![personArray containsObject:newPerson ])

{

[personArray addObject:newPerson];

}

}
編輯:hfy

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • iOS
    iOS
    +關(guān)注

    關(guān)注

    8

    文章

    3401

    瀏覽量

    155493
  • 數(shù)組
    +關(guān)注

    關(guān)注

    1

    文章

    420

    瀏覽量

    27364
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    瀚海微SD NAND/TF卡數(shù)據(jù)損壞與校驗(yàn)錯(cuò)誤(含CRC錯(cuò)誤、數(shù)據(jù)比對(duì)失敗)問(wèn)題解析

    數(shù)據(jù)損壞與校驗(yàn)錯(cuò)誤是瀚海微SD NAND/TF卡在數(shù)據(jù)存儲(chǔ)與傳輸過(guò)程中的關(guān)鍵故障,除常見(jiàn)的CRC錯(cuò)誤外,數(shù)據(jù)比對(duì)失敗(讀取數(shù)據(jù)與寫(xiě)入數(shù)據(jù)不一致)是核心表現(xiàn)形式,直接影響數(shù)據(jù)準(zhǔn)確性,在工業(yè)控制、高清存儲(chǔ)等場(chǎng)景中可能引發(fā)嚴(yán)重后果。以下從故障表現(xiàn)、成因及解決方案展開(kāi)詳細(xì)說(shuō)明。
    的頭像 發(fā)表于 11-30 15:15 ?828次閱讀

    Cortex-M0+處理器的HardFault錯(cuò)誤介紹

    在ARM處理器中,如果一個(gè)程序產(chǎn)生了錯(cuò)誤并且被處理器檢測(cè)到,就會(huì)產(chǎn)生錯(cuò)誤異常。Cortex-M0+處理器只有一種異常用以處理錯(cuò)誤:HardFault。
    的頭像 發(fā)表于 10-14 10:50 ?3388次閱讀
    Cortex-M0+處理器的HardFault<b class='flag-5'>錯(cuò)誤</b>介紹

    分析負(fù)載特性時(shí),有哪些常見(jiàn)的錯(cuò)誤或誤區(qū)?

    分析負(fù)載特性時(shí),很多人會(huì)因 “想當(dāng)然套用經(jīng)驗(yàn)”“忽略實(shí)際場(chǎng)景細(xì)節(jié)” 或 “混淆概念” 導(dǎo)致判斷偏差,進(jìn)而讓報(bào)警閾值調(diào)整失效(如誤報(bào)、漏報(bào))。以下是 6 個(gè)最常見(jiàn)的錯(cuò)誤 / 誤區(qū),附錯(cuò)誤表現(xiàn)、危害
    的頭像 發(fā)表于 10-10 17:03 ?809次閱讀

    如何解決I/O時(shí)鐘布局器錯(cuò)誤

    在 I/O 時(shí)鐘布局器階段可能會(huì)發(fā)生錯(cuò)誤,指出該工具無(wú)法對(duì)該時(shí)鐘結(jié)構(gòu)進(jìn)行布局,直至最后 BUFG 仍然無(wú)法完成布局。
    的頭像 發(fā)表于 09-23 16:05 ?1045次閱讀

    步進(jìn)電機(jī)EMC整改:不過(guò)關(guān)?常見(jiàn)誤區(qū)你可能正在

    深圳南柯電子|步進(jìn)電機(jī)EMC整改:不過(guò)關(guān)?常見(jiàn)誤區(qū)你可能正在
    的頭像 發(fā)表于 09-08 09:58 ?632次閱讀

    國(guó)巨貼片電容的電壓標(biāo)識(shí)有哪些常見(jiàn)錯(cuò)誤

    國(guó)巨貼片電容的電壓標(biāo)識(shí)在識(shí)別和使用過(guò)程中可能存在一些常見(jiàn)錯(cuò)誤,這些錯(cuò)誤可能源于標(biāo)識(shí)本身的模糊性、不同系列產(chǎn)品的差異、對(duì)標(biāo)識(shí)規(guī)則的誤解,或使用環(huán)境的影響。以下是具體分析: 一、標(biāo)識(shí)模糊或缺失導(dǎo)致的錯(cuò)誤
    的頭像 發(fā)表于 08-28 16:51 ?753次閱讀

    避雷!樹(shù)莓派初學(xué)者常犯的5個(gè)錯(cuò)誤

    如果你剛剛?cè)胧謽?shù)莓派,你就會(huì)知道它潛力無(wú)窮,幾乎能實(shí)現(xiàn)你想到的任何功能。然而,這種自由也讓你可能在不知不覺(jué)中做出對(duì)系統(tǒng)有害的操作。在本文中,我將介紹要避免哪些錯(cuò)誤。初學(xué)者最常犯的錯(cuò)誤包括:損壞SD
    的頭像 發(fā)表于 07-22 17:16 ?1337次閱讀
    避雷!樹(shù)莓派初學(xué)者常犯的5個(gè)<b class='flag-5'>錯(cuò)誤</b>!

    電商API常見(jiàn)錯(cuò)誤排查指南:避免集成陷阱

    ? 在電商平臺(tái)開(kāi)發(fā)中,API集成是連接系統(tǒng)、實(shí)現(xiàn)數(shù)據(jù)交換的核心環(huán)節(jié)。然而,許多開(kāi)發(fā)者在集成過(guò)程中常遇到錯(cuò)誤,導(dǎo)致項(xiàng)目延遲、數(shù)據(jù)丟失或用戶體驗(yàn)下降。本文將逐步介紹常見(jiàn)錯(cuò)誤類型、排查方法以及預(yù)防策略
    的頭像 發(fā)表于 07-11 14:21 ?2045次閱讀
    電商API常見(jiàn)<b class='flag-5'>錯(cuò)誤</b>排查指南:避免集成陷阱

    高溫電阻率測(cè)試中的5個(gè)常見(jiàn)錯(cuò)誤及規(guī)避方法

    在材料科學(xué)與工業(yè)檢測(cè)領(lǐng)域,高溫電阻率測(cè)試是評(píng)估材料導(dǎo)電性能的關(guān)鍵手段,如同顛轉(zhuǎn)儀在材料性能檢測(cè)中發(fā)揮重要作用一樣,其測(cè)試結(jié)果的準(zhǔn)確性直接影響科研結(jié)論與生產(chǎn)決策。然而,實(shí)際操作中,諸多細(xì)節(jié)問(wèn)題容易導(dǎo)致
    的頭像 發(fā)表于 06-09 13:07 ?891次閱讀
    高溫電阻率測(cè)試中的5個(gè)常見(jiàn)<b class='flag-5'>錯(cuò)誤</b>及規(guī)避方法

    如何驗(yàn)證CAN控制器的錯(cuò)誤響應(yīng)機(jī)制?

    CAN節(jié)點(diǎn)的穩(wěn)定性、可靠性和安全性得益于其強(qiáng)大的錯(cuò)誤管理機(jī)制。上一篇文章我們介紹了CAN控制器的錯(cuò)誤管理機(jī)制的工作原理。本文將基于其工作原理及ISO16845-1:2016標(biāo)準(zhǔn),為大家介紹
    的頭像 發(fā)表于 04-30 18:24 ?861次閱讀
    如何驗(yàn)證CAN控制器的<b class='flag-5'>錯(cuò)誤</b>響應(yīng)機(jī)制?

    CY7C65215使用IOS中的USB CDC UART類驅(qū)動(dòng)程序是否可以與IOS一起工作?

    我知道 CY7C65215 沒(méi)有適用于 IOS 的驅(qū)動(dòng)程序。但是,使用 IOS 中的 USB CDC UART 類驅(qū)動(dòng)程序是否可以與 IOS 一起工作? 我們正在考慮在我們的設(shè)備中安裝 CY7C65215 而不是 FTDI US
    發(fā)表于 04-30 07:57

    在工業(yè)自動(dòng)化中使用固態(tài)繼電器時(shí)應(yīng)避免的5個(gè)錯(cuò)誤

    固態(tài)繼電器(SSR)已成為工業(yè)自動(dòng)化的無(wú)名英雄。它們安靜、可靠、速度快——這是繼電器應(yīng)具備的所有特點(diǎn)。但就像高科技駕駛艙中的新手飛行員一樣,即使是經(jīng)驗(yàn)豐富的工程師在使用SSR時(shí)也會(huì)常見(jiàn)錯(cuò)誤。本文讓我們來(lái)看看應(yīng)如何避免在工業(yè)自動(dòng)化中使用固態(tài)繼電器時(shí)應(yīng)避免的5個(gè)
    的頭像 發(fā)表于 04-20 11:42 ?719次閱讀

    請(qǐng)問(wèn)TapLinx IOS SDK與Xcode 16不兼容嗎?

    ]/taplinxlibrary/taplinxlibrary.swiftmodule/arm64-apple-ios.swiftmodule 清理 Build / 刪除 DerivedData 目錄,然后
    發(fā)表于 04-02 06:19

    IGBT IPM的錯(cuò)誤輸出功能

    本文將介紹“保護(hù)功能和工作時(shí)序”系列的第五個(gè)功能——“錯(cuò)誤輸出功能(FO)”。
    的頭像 發(fā)表于 03-19 17:22 ?1321次閱讀
    IGBT IPM的<b class='flag-5'>錯(cuò)誤</b>輸出功能

    多板 PCB 組裝中最常見(jiàn)的邏輯錯(cuò)誤

    許多電子系統(tǒng)和產(chǎn)品并不只使用1個(gè)PCB,而是可能包含多個(gè)電路板、單個(gè)電路板和多個(gè)外部模塊,或者通過(guò)電纜與外部設(shè)備連接。在多板系統(tǒng)中,兩個(gè)電路板之間可能會(huì)出現(xiàn)邏輯錯(cuò)誤,但如果沒(méi)有全面審查設(shè)計(jì),可能
    的頭像 發(fā)表于 03-14 18:15 ?919次閱讀
    多板 PCB 組裝中最常見(jiàn)的邏輯<b class='flag-5'>錯(cuò)誤</b>