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`方法來允許賦值。
相關文章
- usb-descriptor(一 )
- usb-descriptor(二)
- usb-descriptor(三)
- Python的descriptorPython
- 【等待時間】asynch descriptor resize
- Python官方文件:Descriptor 指南Python
- wait event ---asynch descriptor resizeAI
- 藍芽 HID class descriptor 分析藍芽
- Python 黑魔法 --- 描述器(descriptor)Python
- 解密 Python 的描述符(descriptor)解密Python
- Python 描述符(Descriptor) 附例項Python
- 動態SQL中DESCRIPTOR的應用 (轉)SQL
- 有用過grpc的嗎?Couldn't find descriptorRPC
- 用Descriptor來實現類級屬性(Property)
- 【USB筆記】配置描述符Configuration Descriptor筆記
- [重慶思莊每日技術分享]-asynch descriptor resize等待事件事件
- Errno 9: Bad file descriptor in python socket錯誤處理薦Python
- zt_關於wait events asynch descriptor resize_wait eventAI
- ORA-12514:TNS:listener does not currently know of service requested in connect descriptor
- Failed to read artifact descriptor for javax.servlet:jstl:jar:1.2 less... (Ctrl+F1) Inspects a MaveAIJavaServletJSJAR
- [20191225]ntpd sendto(192.168.xxx.x) (fd=-1) Bad file descriptor.txt
- HarmonyOS NEXT 元件市場在DevEco Studio,安裝出現Fail to load plugin descriptor from file cases-master.zip元件devAIPluginAST
- [iOS] ios的runtimeiOS
- SAP UI5 初學者教程之十 - 什麼是 SAP UI5 應用的描述符 Descriptor 試讀版UI
- iOS12、iOS11、iOS10、iOS9常見適配iOS
- iOS音訊-AVAudioSessioniOS音訊Session
- ios安全加固 ios 加固方案iOS
- iOS逆向工程 iOS工具篇iOS
- IOSiOS
- iOS-音訊-AVAudioSessioniOS音訊Session
- 【iOS開發】iOS 動畫詳解iOS動畫
- ios加固,ios程式碼混淆,ios程式碼混淆工具, iOS原始碼混淆使用說明詳解iOS原始碼
- iOS上架流程iOS上架流程iOS
- [iOS]適配iOS10問題iOS
- 【ios】ios 對於wkwebview白屏問題iOSWebView
- ReactNative TabBarIOS和NavigatorIOSReacttabBariOS
- iOS 11恐怖故事:iOS安全的沉浮iOS
- iOS 本地通知NSNotificationcenter --- iOS 開發iOS