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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值