日常tip(runtime方法替換,數組多種排序)

1NSObject 創建的時候 會調用一個方法+ (void)load;UIimage是繼承NSObject,所以UIimage也會調用load方法,使用MJExtension 有一個nsobject的類別,調用load方法。所以繼承自nsobject都會調用這個load方法,創建一個UIimage的擴展,寫上load方法,在load方法裏面用runtime寫一個方法的替換,如下


利用runtime實現了方法替換,主要是做sdk的時候 sdk內部使用的圖片 如果和項目圖片重名可能會有問題,用這個方法將sdk內部使用圖片的地方,無論是imageNamed:還是sdSetimageauto:這個方法,都會強制調用下面的方法:


這個技巧很重要,不用在內部代碼裏每一個imagenamed都改,只要改一個文件就可以了

疑問:load方法是自動調用的嗎  還是因爲mjextension實現了這個擴展後,使用了load方法實現了load方法,其下的所有繼承自NSObject的纔可以都使用load方法?如果沒有這個mjextension  該如果調用load方法?


使用masonry寫動畫的時候,可以定義一個mascontraints變量,在給某個viewframe定值的時候朝着需要的動畫方向,比如上下的動畫,就定義一個mascontraints = selfviewtopequalTo(xxx),在事宜的時候在事宜的方法裏,拿到這個值,給賦新值舊行了,





3 字符串和 其他比較 中用到的方法 NSOrderedDescending NSOrderedSame的區別




4  還是數組的排序


當一個數組有多個user對象,user有多個屬性的時候,我們要根據userlevel排序,這時候 要用到NSSortDescriptor,可以寫


    假設要對userArray數組中的對象進行排序,而數組中含有多個User對象(User繼承於NSManagedObject),User中有一個屬性叫做level

[plain]

1. NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"level" ascending:YES]; 

2. [userArray sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]]; 

     這樣,就可以根據每一個Usercountry來進行升序或降序的排列,sortUsingDescriptors的參數是一個數組,也就是說可以使用多個排序參數。

    再比如說,User有一個關係叫做imageimage有個屬性叫做timestamp,如果要根據Userimage關係的timestamp排序,僅需把上面代碼中的country改爲,image.timestamp。即

[plain]

1. NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"image.timestamp" ascending:YES]; 

2. [userArray sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]]; 

發佈了91 篇原創文章 · 獲贊 15 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章