PHFetchResult

  • 父類:NSObject

從一個(gè)Photos的獲取方法中返回的有序的資源或者集合的列表茵宪。

一梧宫、概述

當(dāng)你使用PHAsset困食、PHCollection荆残、PHAssetCollectionPHCollectionList 類的方法來(lái)獲取對(duì)象,Photos會(huì)提供一個(gè)PHFetchResult類的一個(gè)對(duì)象作為結(jié)果亿笤。你訪問(wèn)結(jié)果中的內(nèi)容可以像使用NSArray類的方法獲取內(nèi)容一樣來(lái)獲取PHFetchResult中的內(nèi)容翎迁。與NSArray對(duì)象不同的是,一個(gè)PHFetchResult對(duì)象中的內(nèi)容是動(dòng)態(tài)加載的净薛,如果你需要一些內(nèi)容它才會(huì)去照片庫(kù)中去獲取對(duì)應(yīng)的內(nèi)容汪榔,這可以在處理大量的結(jié)果的時(shí)候提供一個(gè)最佳的性能。

獲取結(jié)果對(duì)它包含的內(nèi)容提供線程安全的訪問(wèn)罕拂。在一次獲取之后揍异,獲取結(jié)果count屬性值是一個(gè)常量,獲取結(jié)果中包含的所有對(duì)象會(huì)保持相同的localIdentifier屬性值爆班。(為了得到一次獲取的內(nèi)容更新衷掷,需要為共享的PHPhotoLibrary對(duì)象注冊(cè)一個(gè)監(jiān)聽(tīng)變化的監(jiān)聽(tīng)器。)

獲取結(jié)果會(huì)緩存它里面的內(nèi)容柿菩,會(huì)存儲(chǔ)最近訪問(wèn)過(guò)的大多數(shù)內(nèi)容戚嗅。由于這些對(duì)象之外的其他的對(duì)象不會(huì)被緩存,所以訪問(wèn)未被緩存的對(duì)象需要重新獲取這些對(duì)象枢舶。這個(gè)過(guò)程可能會(huì)導(dǎo)致之前在這些對(duì)象中獲取到的一些值的改變懦胞。

二、內(nèi)容

1. 查詢獲取結(jié)果

- (BOOL)containsObject:(ObjectType)anObject;

查詢給定的對(duì)象是否在獲取結(jié)果中凉泄。
這個(gè)方法會(huì)遍歷獲取結(jié)果躏尉,對(duì)其中的每一個(gè)對(duì)象使用- (BOOL)isEqual:(id)object;方法進(jìn)行比對(duì)。

@property (readonly) NSUInteger count;

獲取結(jié)果中的對(duì)象的數(shù)量后众。

- (NSUInteger)countOfAssetsWithMediaType:(PHAssetMediaType)mediaType;

返回獲取結(jié)果中指定類型的資源的數(shù)量胀糜。
第一次調(diào)用這個(gè)方法Photos會(huì)枚舉每一個(gè)對(duì)象進(jìn)行匹配,并將匹配的結(jié)果數(shù)量進(jìn)行緩存蒂誉,之后所有的該方法的調(diào)用都只返回緩存的結(jié)果教藻。
這個(gè)方法只會(huì)記錄PHAsset類的對(duì)象的數(shù)量,如果獲取結(jié)果中只有PHAssetCollection類的對(duì)象或PHCollectionList類的對(duì)象右锨,則該方法會(huì)返回0括堤。

PHAssetMediaType

typedef NS_ENUM(NSInteger, PHAssetMediaType) {
    PHAssetMediaTypeUnknown = 0, // 未知
    PHAssetMediaTypeImage   = 1, // 圖片
    PHAssetMediaTypeVideo   = 2, // 視頻
    PHAssetMediaTypeAudio   = 3, // 音頻
} PHOTOS_ENUM_AVAILABLE_IOS_TVOS(8_0, 10_0);
@property (nonatomic, readonly, nullable) ObjectType firstObject;

獲取結(jié)果中的第一個(gè)對(duì)象。如果獲取結(jié)果為空則返回nil绍移。

@property (nonatomic, readonly, nullable) ObjectType lastObject;

獲取結(jié)果中的最后一個(gè)對(duì)象悄窃。如果獲取結(jié)果為空則返回nil

- (ObjectType)objectAtIndex:(NSUInteger)index;

返回指定索引位置的對(duì)象蹂窖。如果索引值index超出了獲取結(jié)果的數(shù)量范圍會(huì)引發(fā)一個(gè)異常(NSRangeException
)轧抗。

- (ObjectType)objectAtIndexedSubscript:(NSUInteger)idx;

返回指定索引位置的對(duì)象。與上面的方法相同恼策,即下面兩種用法一樣:

NSLog(@"First object: %@", [fetchResult objectAtIndex:0]);
NSLog(@"First object: %@", fetchResult[0]);
- (NSArray<ObjectType> *)objectsAtIndexes:(NSIndexSet *)indexes;

返回獲取結(jié)果中指定的索引集合對(duì)應(yīng)所有對(duì)象組成的數(shù)組。如果索引集合中任何一個(gè)索引超出了獲取結(jié)果的數(shù)量范圍,就會(huì)引發(fā)一個(gè)異常(NSRangeException)涣楷。

2. 在獲取結(jié)果中查找對(duì)象

- (NSUInteger)indexOfObject:(ObjectType)anObject;

返回獲取結(jié)果中與指定對(duì)象相同的對(duì)象的索引值分唾,如果有多個(gè),則返回最小的索引值狮斗。
這個(gè)方法將從索引為0處開(kāi)始枚舉獲取結(jié)果中的對(duì)象绽乔,并使用- (BOOL)isEqual:(id)object;方法進(jìn)行比對(duì),直到找到第一個(gè)與給定對(duì)象相同的對(duì)象碳褒,則終止枚舉折砸,并返回這個(gè)索引值。如果沒(méi)有找到與給定對(duì)象相同的對(duì)象沙峻,則返回NSNotFound睦授。

- (NSUInteger)indexOfObject:(ObjectType)anObject inRange:(NSRange)range;

返回獲取結(jié)果中在指定范圍內(nèi),與指定對(duì)象相同的對(duì)象的索引值摔寨,如果有多個(gè)去枷,則返回最小的索引值。
這個(gè)方法將從給定的范圍的起始位置開(kāi)始枚舉獲取結(jié)果中的對(duì)象是复,并使用- (BOOL)isEqual:(id)object;方法進(jìn)行比對(duì)删顶,直到找到第一個(gè)與給定對(duì)象相同的對(duì)象,則終止枚舉淑廊,并返回這個(gè)索引值逗余。如果沒(méi)有找到與給定對(duì)象相同的對(duì)象,則返回NSNotFound季惩。
如果給定的范圍超出了獲取結(jié)果的數(shù)量范圍录粱,就會(huì)引發(fā)一個(gè)異常(NSRangeException)。

3. 在獲取結(jié)果中執(zhí)行對(duì)對(duì)象的操作

- (void)enumerateObjectsAtIndexes:(NSIndexSet *)s options:(NSEnumerationOptions)opts usingBlock:(void (^)(ObjectType obj, NSUInteger idx, BOOL *stop))block;
  • s NSIndexSet - 要枚舉的范圍蜀备。
  • opts NSEnumerationOptions - 快速枚舉的設(shè)置
  • block - 快速枚舉的操作
  • obj ObjectType - 被枚舉的對(duì)象
  • idx NSUInteger - 被枚舉的對(duì)象的索引
  • stop BOOL - 在block中設(shè)置為YES將會(huì)取消當(dāng)前對(duì)獲取結(jié)果的處理关摇。

快速枚舉獲取結(jié)果中指定范圍內(nèi)的所有對(duì)象。
該方法默認(rèn)是順序枚舉碾阁,設(shè)置opts會(huì)改變枚舉順序输虱。
該方法是同步方法,會(huì)阻塞主線程脂凶。

NSEnumerationOptions

typedef NS_OPTIONS(NSUInteger, NSEnumerationOptions) {
    NSEnumerationConcurrent = (1UL << 0), // 亂序進(jìn)行
    NSEnumerationReverse = (1UL << 1), // 倒敘進(jìn)行
};
- (void)enumerateObjectsUsingBlock:(void (^)(ObjectType obj, NSUInteger idx, BOOL *stop))block;
  • block - 快速枚舉的操作
  • obj ObjectType - 被枚舉的對(duì)象
  • idx NSUInteger - 被枚舉的對(duì)象的索引
  • stop BOOL - 在block中設(shè)置為YES將會(huì)取消當(dāng)前對(duì)獲取結(jié)果的處理宪睹。

快速枚舉獲取結(jié)果中的所有對(duì)象。
該方法是順序枚舉蚕钦,并且是同步方法亭病,會(huì)阻塞主線程。

- (void)enumerateObjectsWithOptions:(NSEnumerationOptions)opts usingBlock:(void (^)(ObjectType obj, NSUInteger idx, BOOL *stop))block;
  • opts NSEnumerationOptions - 快速枚舉的設(shè)置
  • block - 快速枚舉的操作
  • obj ObjectType - 被枚舉的對(duì)象
  • idx NSUInteger - 被枚舉的對(duì)象的索引
  • stop BOOL - 在block中設(shè)置為YES將會(huì)取消當(dāng)前對(duì)獲取結(jié)果的處理嘶居。

快速枚舉獲取結(jié)果中的所有對(duì)象罪帖。
該方法默認(rèn)是順序枚舉促煮,設(shè)置opts會(huì)改變枚舉順序。
該方法是同步方法整袁,會(huì)阻塞主線程菠齿。

三、舉例

嗯坐昙,有待更新绳匀。等我把整個(gè)Photos寫(xiě)完吧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末炸客,一起剝皮案震驚了整個(gè)濱河市疾棵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌痹仙,老刑警劉巖是尔,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蝶溶,居然都是意外死亡嗜历,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)抖所,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)梨州,“玉大人,你說(shuō)我怎么就攤上這事田轧”┙常” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵傻粘,是天一觀的道長(zhǎng)每窖。 經(jīng)常有香客問(wèn)我,道長(zhǎng)弦悉,這世上最難降的妖魔是什么窒典? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮稽莉,結(jié)果婚禮上瀑志,老公的妹妹穿的比我還像新娘。我一直安慰自己污秆,他們只是感情好劈猪,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著良拼,像睡著了一般战得。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上庸推,一...
    開(kāi)封第一講書(shū)人閱讀 52,682評(píng)論 1 312
  • 那天常侦,我揣著相機(jī)與錄音浇冰,去河邊找鬼。 笑死聋亡,一個(gè)胖子當(dāng)著我的面吹牛湖饱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播杀捻,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蚓庭!你這毒婦竟也來(lái)了致讥?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤器赞,失蹤者是張志新(化名)和其女友劉穎垢袱,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體港柜,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡请契,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了夏醉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片爽锥。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖畔柔,靈堂內(nèi)的尸體忽然破棺而出氯夷,到底是詐尸還是另有隱情,我是刑警寧澤靶擦,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布腮考,位于F島的核電站,受9級(jí)特大地震影響玄捕,放射性物質(zhì)發(fā)生泄漏踩蔚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一枚粘、第九天 我趴在偏房一處隱蔽的房頂上張望馅闽。 院中可真熱鬧,春花似錦赌结、人聲如沸捞蛋。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)拟杉。三九已至,卻和暖如春量承,著一層夾襖步出監(jiān)牢的瞬間搬设,已是汗流浹背穴店。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拿穴,地道東北人泣洞。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像默色,于是被迫代替她去往敵國(guó)和親球凰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容