女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

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

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

454398 ? 來源:it610 ? 作者:充電實(shí)踐 ? 2020-11-11 16:30 ? 次閱讀

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

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

- (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];

}

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

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

...

在某個(gè)controller中初始化了數(shù)組,該controller注冊(cè)了某個(gè)通知,有其他類每隔一定時(shí)間發(fā)送通知給controller,通知里包含person對(duì)象。當(dāng)前controller收到通知后,通過containObject方法過濾重復(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)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • iOS
    iOS
    +關(guān)注

    關(guān)注

    8

    文章

    3399

    瀏覽量

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

    關(guān)注

    1

    文章

    419

    瀏覽量

    26376
收藏 人收藏

    評(píng)論

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

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

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

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

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

    GPIO錯(cuò)誤排查與解決

    在嵌入式系統(tǒng)和微控制器編程中,通用輸入輸出(GPIO)是最常見的接口之一。然而,在使用GPIO時(shí),我們可能會(huì)遇到各種錯(cuò)誤。 1. 理解GPIO GPIO是微控制器上的一組引腳,可以被配置為輸入或輸出
    的頭像 發(fā)表于 01-09 09:46 ?2007次閱讀

    RTOS中的錯(cuò)誤檢查機(jī)制

    在嵌入式應(yīng)用中,有可能發(fā)生各種各樣的錯(cuò)誤,系統(tǒng)必須能夠檢測到這些錯(cuò)誤并作出適當(dāng)?shù)捻憫?yīng)。RTOS通常內(nèi)置了一些錯(cuò)誤檢查功能,用于檢測錯(cuò)誤并向應(yīng)用提供響應(yīng)
    的頭像 發(fā)表于 01-03 14:44 ?681次閱讀

    ADS1248測溫容易受干擾,導(dǎo)致芯片不輸出激勵(lì)電流,測溫錯(cuò)誤,怎么解決?

    ADS1248(四線制)測溫容易受干擾,導(dǎo)致芯片不輸出激勵(lì)電流,測溫錯(cuò)誤,必須復(fù)位控制器才能重新測溫,請(qǐng)問有沒有好的解決辦法
    發(fā)表于 12-13 07:31

    如何修正初學(xué)者使用加熱臺(tái)時(shí)最容易錯(cuò)誤,內(nèi)含新品偷跑【MINIWARE】

    行業(yè)資訊
    易迪賽智能科技
    發(fā)布于 :2024年11月27日 14:13:37

    SQL錯(cuò)誤代碼及解決方案

    在SQL數(shù)據(jù)庫開發(fā)和管理中,常見的錯(cuò)誤代碼及其解決方案可以歸納如下: 一、語法錯(cuò)誤(Syntax Errors) 錯(cuò)誤代碼 :無特定代碼,但通常會(huì)在錯(cuò)誤消息中明確指出是語法
    的頭像 發(fā)表于 11-19 10:21 ?6118次閱讀

    C++新手容易的十個(gè)編程錯(cuò)誤

    簡單的總結(jié)一下?C++ 新手容易的一些編程錯(cuò)誤,給新人們提供一個(gè)參考。 1 有些關(guān)鍵字在 cpp 文件中多寫了 對(duì)于 C++ 類,一些關(guān)鍵字只要寫在 .h 中就好,cpp 中就不用再加上了,比如
    的頭像 發(fā)表于 11-15 12:42 ?922次閱讀

    pcb板設(shè)計(jì)中的常見錯(cuò)誤

    印刷電路板(PCB)是電子設(shè)備中不可或缺的組成部分,它負(fù)責(zé)連接電子元件并傳輸電信號(hào)。一個(gè)優(yōu)秀的PCB設(shè)計(jì)對(duì)于確保電路的性能、可靠性和成本效益至關(guān)重要。然而,在PCB設(shè)計(jì)過程中,工程師可能會(huì)一些常見
    的頭像 發(fā)表于 11-04 13:58 ?786次閱讀

    網(wǎng)關(guān)錯(cuò)誤是什么意思

    網(wǎng)關(guān)錯(cuò)誤是計(jì)算機(jī)網(wǎng)絡(luò)中一個(gè)常見且復(fù)雜的問題,它通常發(fā)生在客戶端和服務(wù)器之間的通信過程中,導(dǎo)致客戶端的請(qǐng)求無法被正確處理或響應(yīng)。為了全面理解網(wǎng)關(guān)錯(cuò)誤,本文將從其定義、原因、類型、影響、診斷方法以及解決方案等多個(gè)方面進(jìn)行詳細(xì)闡述。
    的頭像 發(fā)表于 09-30 11:40 ?8400次閱讀

    蘋果推出iOS 17.6.1升級(jí)版,修復(fù)重要錯(cuò)誤內(nèi)容

    8月20日資訊,蘋果并未如預(yù)期推出iOS 17.6.2更新,而是意外地重新發(fā)布了iOS 17.6.1的升級(jí)版,新版本編號(hào)為21G101,這一編號(hào)標(biāo)志著較之前發(fā)布的21G93版本有所升級(jí)。此次重發(fā)旨在解決一系列關(guān)鍵問題,并特別強(qiáng)調(diào)了重要錯(cuò)
    的頭像 發(fā)表于 08-21 15:31 ?1344次閱讀

    IOS12以上搜索不到藍(lán)牙是怎么回事?

    現(xiàn)在是這樣的,IOS12以下測試能夠搜索到設(shè)備藍(lán)牙。但是IOS12以上就都搜索不到。 是什么原因呢?
    發(fā)表于 07-02 08:03

    配對(duì)過IOS13.5的手機(jī)無法連接刪除綁定信息的esp32藍(lán)牙,怎么解決?

    你好,我的IDF版本是4.1,手機(jī)是IOS13.5版本的,APP是nRF Connect。 當(dāng)IOS手機(jī)配對(duì)連接esp32藍(lán)牙成功后,把esp32本地存儲(chǔ)的藍(lán)牙綁定信息刪除掉,IOS手機(jī)就沒辦法再次
    發(fā)表于 06-25 07:56

    一文讀懂CAN通訊錯(cuò)誤

    CAN總線通信技術(shù)廣泛應(yīng)用于多個(gè)行業(yè),是每個(gè)總線設(shè)計(jì)工程師必學(xué)的一個(gè)通訊網(wǎng)絡(luò)。然而,對(duì)于CAN通信中的錯(cuò)誤幀,許多人僅停留在表面了解,缺乏深入理解,這導(dǎo)致許多工程師在面對(duì)總線通信故障時(shí)感到無從下手
    的頭像 發(fā)表于 06-12 08:24 ?3283次閱讀
    一文讀懂CAN通訊<b class='flag-5'>錯(cuò)誤</b>幀