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

在路上重名了啊發表於2018-12-12

在新接手的專案上做開發是比較慢的,尤其是開發、產品、設計都換了幾波人的上了年紀的專案。其實我們還是可以通過一些途徑來提高維護老專案的效率。比如今天(全新的開發人員、產品、設計)就碰到設計說新做的需求有一個切圖是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

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

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

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

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

第三步:列印圖片的名字

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

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

注意: xib中設定的圖片名字,列印為nil


視訊轉GIF步驟

  • 1、brew install ffmpeg
  • 2、ffmpeg -ss 00:00:00 -i flex.mov -s 375x667 -r "2" flex.gif

相關文章