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]];