在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

iOS使用containsObject容易犯的錯誤

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

掃碼添加小助手

加入工程師交流群

項目開發過程中可能會有這種需求,某個可變數組不斷地增加元素,同時我們需要判斷新的元素是否已經在數組里,如果不在才添加該元素,否則丟棄。

基于以上的需求,很容易想到使用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.

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

@interface Person

@property NSString *name;

@property NSInteger age;

@end

@implementation Person

@end

Person中包含name和age,分別表示名字和年齡,數組中包含多個Person,我們的目的是,如果數組中存在同樣的人名,并且年齡完全相同,就舍棄新的Person,如何實現這個需求呢?我們需要重載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方法就能完美實現我們想要的功能。那么問題來了,像以下代碼,會存在什么問題?

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

...

在某個controller中初始化了數組,該controller注冊了某個通知,有其他類每隔一定時間發送通知給controller,通知里包含person對象。當前controller收到通知后,通過containObject方法過濾重復的person,然后保存到personArray 中。

通知的處理函數如下:

-(void)didReceiveNotification:(id)sender

{

...

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

...(做一些其他運算)

if(![personArray containsObject:newPerson ])

{

[personArray addObject:newPerson];

}

}
編輯:hfy

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • iOS
    iOS
    +關注

    關注

    8

    文章

    3399

    瀏覽量

    152920
  • 數組
    +關注

    關注

    1

    文章

    420

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    CY7C65215使用IOS中的USB CDC UART類驅動程序是否可以與IOS一起工作?

    我知道 CY7C65215 沒有適用于 IOS 的驅動程序。但是,使用 IOS 中的 USB CDC UART 類驅動程序是否可以與 IOS 一起工作? 我們正在考慮在我們的設備中安裝 CY7C65215 而不是 FTDI US
    發表于 04-30 07:57

    在工業自動化中使用固態繼電器時應避免的5個錯誤

    固態繼電器(SSR)已成為工業自動化的無名英雄。它們安靜、可靠、速度快——這是繼電器應具備的所有特點。但就像高科技駕駛艙中的新手飛行員一樣,即使是經驗豐富的工程師在使用SSR時也會常見錯誤。本文讓我們來看看應如何避免在工業自動化中使用固態繼電器時應避免的5個
    的頭像 發表于 04-20 11:42 ?242次閱讀

    請問TapLinx IOS SDK與Xcode 16不兼容嗎?

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

    GPIO錯誤排查與解決

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

    RTOS中的錯誤檢查機制

    在嵌入式應用中,有可能發生各種各樣的錯誤,系統必須能夠檢測到這些錯誤并作出適當的響應。RTOS通常內置了一些錯誤檢查功能,用于檢測錯誤并向應用提供響應
    的頭像 發表于 01-03 14:44 ?737次閱讀

    ADS1248測溫容易受干擾,導致芯片不輸出激勵電流,測溫錯誤,怎么解決?

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

    如何修正初學者使用加熱臺時最容易錯誤,內含新品偷跑【MINIWARE】

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

    SQL錯誤代碼及解決方案

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

    C++新手容易的十個編程錯誤

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

    pcb板設計中的常見錯誤

    印刷電路板(PCB)是電子設備中不可或缺的組成部分,它負責連接電子元件并傳輸電信號。一個優秀的PCB設計對于確保電路的性能、可靠性和成本效益至關重要。然而,在PCB設計過程中,工程師可能會一些常見
    的頭像 發表于 11-04 13:58 ?880次閱讀

    網關錯誤是什么意思

    網關錯誤是計算機網絡中一個常見且復雜的問題,它通常發生在客戶端和服務器之間的通信過程中,導致客戶端的請求無法被正確處理或響應。為了全面理解網關錯誤,本文將從其定義、原因、類型、影響、診斷方法以及解決方案等多個方面進行詳細闡述。
    的頭像 發表于 09-30 11:40 ?9373次閱讀

    SRAM中的錯誤檢測

    電子發燒友網站提供《SRAM中的錯誤檢測.pdf》資料免費下載
    發表于 09-20 11:15 ?0次下載
    SRAM中的<b class='flag-5'>錯誤</b>檢測

    CAN總線錯誤狀態的種類

    CAN總線錯誤狀態的種類主要包括以下幾種,每種狀態都反映了CAN總線網絡中節點或總線的不同錯誤情況,以及相應的通信能力和限制。
    的頭像 發表于 09-03 14:17 ?3438次閱讀

    蘋果推出iOS 17.6.1升級版,修復重要錯誤內容

    8月20日資訊,蘋果并未如預期推出iOS 17.6.2更新,而是意外地重新發布了iOS 17.6.1的升級版,新版本編號為21G101,這一編號標志著較之前發布的21G93版本有所升級。此次重發旨在解決一系列關鍵問題,并特別強調了重要
    的頭像 發表于 08-21 15:31 ?1398次閱讀

    EspTouch for IOS V3.0為什么配置不了ESP8266?

    ESP8266固件版本: SDK version:1.0.1 IOT VERSION = v1.0.2t45772(a) TYPE: ESPTOUCH V1.4 espTouch for IOS
    發表于 07-15 08:16
    主站蜘蛛池模板: 天天噜夜夜操 | 狂野欧美激情性xxxx | 一级女性黄 色生活片 | 国产精品久久久亚洲第一牛牛 | 免费高清在线爱做视频 | 欧美三级小视频 | 狠狠干网址 | 鲁久久 | 国产成人精品亚洲日本在线观看 | 国产美女动态免费视频 | 国产精品午夜免费观看网站 | 久久夜色精品国产飘飘 | 日韩高清特级特黄毛片 | 亚洲综合伊人 | 日本高清视频一区 | 日日拍夜夜嗷嗷叫狠狠 | 欧美日韩a级a | se97se成人亚洲网站在线观看 | 久久国产精品永久免费网站 | 最近观看免费高清视频 | 奇米成人影视 | 久久人成 | 午夜性视频播放免费视频 | 国产一级做a爰片久久毛片 国产一级做a爰片久久毛片男 | 日本欧美一级 | 欧美一级黄色片 | 真人实干一级毛片aa免费 | 四虎影院一级片 | 日韩欧美中文字幕在线视频 | 男女透逼视频 | 黄色三级录像 | 久久久伊香蕉网站 | 中文字幕不卡一区 | 欧美黄色免费看 | 亚洲一区二区影视 | 朱元璋传奇1998王耿豪版 | 女人张开腿让男人做爽爽 | 天天摸夜夜摸夜夜狠狠摸 | 国产性videostv另类极品 | 亚洲你xx我xx网站 | dy天堂 |