iOS - NSSortDescriptor
排序是電腦科學中不能避免的問題,很幸運看到了一篇關於排序的NSSortDescriptor類的文件。文件地址。
NSSortDescriptor是一個用來描述如何排序一個物件集合的描述符,基於這些物件的共同屬性。
概述
你可以建立一個NSSortDescriptor的例項,通過指定要用來比較和進行排序(升序或者降序)的屬性的鍵。你可以指定一個方法來實現比較,你也能使用其他排序方法例如localizedStandardCompare:
和 localizedCaseInsensitiveCompare:
。排序丟擲異常如果被排序的物件沒有答覆(respond)排序描述符實現比較的方法。
下面是你可以使用排序描述符做的事情:
- 陣列排序(NSArray和NSMutableArray的例項,可以參閱sortedArrayUsingDescriptors:和sortUsingDescriptors:)
- 直接比較兩個物件(可以參閱 compareObject:toObject:)
- 指定從核心資料獲取請求返回的物件的順序(可以參閱sortDescriptors)
宣告
// 通過指定key和排序方式建立並返回一個排序描述符。
+ (instancetype)sortDescriptorWithKey:(NSString *)key
ascending:(BOOL)ascending;
// 通過指定key和排序方式初始化一個排序描述符。
- (instancetype)initWithKey:(NSString *)key
ascending:(BOOL)ascending;
// 通過指定key、排序方式和排序方法建立並返回一個排序描述符。
+ (instancetype)sortDescriptorWithKey:(NSString *)key
ascending:(BOOL)ascending
selector:(SEL)selector;
// 通過指定key、排序方式和排序方法初始化一個排序描述符。
- (instancetype)initWithKey:(NSString *)key
ascending:(BOOL)ascending
selector:(SEL)selector;
// 通過指定key、排序方式和排序閉包建立並返回一個排序描述符。
+ (instancetype)sortDescriptorWithKey:(NSString *)key
ascending:(BOOL)ascending
comparator:(NSComparator)cmptr;
// 通過指定key、排序方式和排序閉包初始化一個排序描述符。
- (instancetype)initWithKey:(NSString *)key
ascending:(BOOL)ascending
comparator:(NSComparator)cmptr;
初始化方法中相關引數
ascending
:指明是否升序排序的布林值。key
:指明在排序是進行比較的屬性。selector
:比較時使用的方法。comparator
:排序描述符的比較閉包。
使用排序描述符
// 返回兩個物件排序順序結果
- (NSComparisonResult)compareObject:(id)object1 toObject:(id)object2;
// 返回一個逆序的排序描述符
@property(readonly, retain) id reversedSortDescriptor;
// 強制一個被安全解碼(遵守`NSSecureCoding`協議)的排序描述符允許進行賦值
- (void)allowEvaluation;
關於這個方法的討論:當遵守NSSecureCoding協議的排序描述符正在被安全的解碼時,賦值是不被允許的。因為解檔出來的物件可能有潛在的風險。
所以在允許賦值之前,應該合適keypaths、selectors、相關屬性,避免可能有錯誤的、惡意的程式碼被執行。可以呼叫`allowEvaluation`方法來允許賦值。
相關文章
- Python 描述符(Descriptor) 附例項Python
- 有用過grpc的嗎?Couldn't find descriptorRPC
- 【USB筆記】配置描述符Configuration Descriptor筆記
- ORA-12514:TNS:listener does not currently know of service requested in connect descriptor
- [重慶思莊每日技術分享]-asynch descriptor resize等待事件事件
- [20191225]ntpd sendto(192.168.xxx.x) (fd=-1) Bad file descriptor.txt
- Failed to read artifact descriptor for javax.servlet:jstl:jar:1.2 less... (Ctrl+F1) Inspects a MaveAIJavaServletJSJAR
- HarmonyOS NEXT 元件市場在DevEco Studio,安裝出現Fail to load plugin descriptor from file cases-master.zip元件devAIPluginAST
- iOS12、iOS11、iOS10、iOS9常見適配iOS
- iOS逆向工程 iOS工具篇iOS
- ios安全加固 ios 加固方案iOS
- ios加固,ios程式碼混淆,ios程式碼混淆工具, iOS原始碼混淆使用說明詳解iOS原始碼
- ios資料管理軟體AnyTrans for iOSiOS
- iOS上架流程iOS上架流程iOS
- iOS簽名、iOS企業簽名、iOS超級簽名工具使用iOS
- iOS UIAlertActionStyleiOSUI
- iOS排序iOS排序
- iOS CoreDataiOS
- iOS AVAssetiOS
- iOS | NSProxyiOS
- mock in iOSMockiOS
- Error for iOSErroriOS
- iOS runloopiOSOOP
- SAP UI5 初學者教程之十 - 什麼是 SAP UI5 應用的描述符 Descriptor 試讀版UI
- iOS開發基礎107-iOS直播iOS
- FoneDog Toolkit for iOS on Mac(ios資料恢復)iOSMac資料恢復
- AnyTrans for iOS for mac ios資料管理軟體iOSMac
- iOS MJRefresh適配ios11以及iPhoneXiOSiPhone
- IOS資料傳輸工具:FonePaw iOS Transfer for MaciOSMac
- iOS歷史(iOS系統發展歷史)iOS
- 玩轉iOS開發:iOS 10 新特性《UserNotifications》iOS
- 升級到iOS 18、降級回iOS 17iOS
- iOS RunLoop(一)iOSOOP
- Swift iOS:KVOSwiftiOS
- iOS 基礎iOS
- iOS 渲染框架iOS框架
- Swift iOS : RichTextSwiftiOS
- iOS CocoaPods使用iOS