快速接手新项目技巧:使用Runtime找到UIImage名字

本文介绍了一种在老项目中快速定位图片名称的方法,通过给UIImage添加name属性,结合多种工具定位UIImageVIew地址,最后使用LLDB打印图片名字,有效提高了开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在新接手的项目上做开发是比较慢的,尤其是开发、产品、设计都换了几波人的上了年纪的项目。其实我们还是可以通过一些途径来提高维护老项目的效率。比如今天(全新的开发人员、产品、设计)就碰到设计说新做的需求有一个切图是app中原来就有的,为了保持风格统一,沿用原来的切图。难道还需要定位到当前的页面对应的代码中去寻找相应图片的名字吗?如果后面的新需求有大量类似的图片怎么办?经过一番思考,确定了一种比较快速定位图片名字的方法。如下:

第一步:给UIImage添加name属性

利用runtimeUIImage的分类中给UIImage关联一个属性p_name,替换原来的imageNamed:方法,在自己的方法中将图片的名字保存到p_name中。

#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface UIImage (name)
@end
NS_ASSUME_NONNULL_END
复制代码
#import "UIImage+name.h"
#import <objc/runtime.h>

@implementation UIImage (name)
- (void)setP_name:(NSString *)p_name {
    objc_setAssociatedObject(self, @selector(p_name), p_name, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
-(NSString *)p_name {
    return objc_getAssociatedObject(self, _cmd);
}
+ (UIImage *)wsk_imageNamed:(NSString *)imageName {
    UIImage *image = [UIImage wsk_imageNamed:imageName];
    image.p_name = imageName;
    return image;
}
+(void)load {
    Method imageNameMethod = class_getClassMethod([self class], @selector(imageNamed:));
    Method wsk_imageNamedMethod = class_getClassMethod([UIImage class], @selector(wsk_imageNamed:));
    method_exchangeImplementations(imageNameMethod, wsk_imageNamedMethod);
}
@end
复制代码

第二步:找到目标UIImageVIew的地址

  • 方法二:使用Chisel命令pviews

  • 方法三:使用工具FLEX找到UIImageVIew的地址。

第三步:打印图片的名字

使用LLDBpo命令 po [((UIImageView*)0x122203f40).image valueForKey:@"p_name"] 打印图片的名字。

注意: xib中设置的图片名字,打印为nil


视频转GIF步骤

  • 1、brew install ffmpeg
  • 2、ffmpeg -ss 00:00:00 -i flex.mov -s 375x667 -r "2" flex.gif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值