1,NSObject類 創建的時候 會調用一個方法+ (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方法?
2 使用masonry寫動畫的時候,可以定義一個mascontraints變量,在給某個view的frame定值的時候朝着需要的動畫方向,比如上下的動畫,就定義一個mascontraints = self,view。top,equalTo(xxx),在事宜的時候在事宜的方法裏,拿到這個值,給賦新值舊行了,
3 字符串和 其他比較 中用到的方法 NSOrderedDescending 和NSOrderedSame的區別
4 還是數組的排序
當一個數組有多個user對象,user有多個屬性的時候,我們要根據user的level排序,這時候 要用到NSSortDescriptor,可以寫
假設要對userArray數組中的對象進行排序,而數組中含有多個User對象(User繼承於NSManagedObject),User中有一個屬性叫做level。
[plain]
1. NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"level" ascending:YES];
2. [userArray sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
這樣,就可以根據每一個User的country來進行升序或降序的排列,sortUsingDescriptors的參數是一個數組,也就是說可以使用多個排序參數。
再比如說,User有一個關係叫做image,image有個屬性叫做timestamp,如果要根據User的image關係的timestamp排序,僅需把上面代碼中的country改爲,image.timestamp。即
[plain]
1. NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"image.timestamp" ascending:YES];
2. [userArray sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];