日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【iOS】【项目全局动态埋点】Runtime+Aspects(hook)

發(fā)布時(shí)間:2025/4/5 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【iOS】【项目全局动态埋点】Runtime+Aspects(hook) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

1

2?

[錯(cuò)誤代碼示范]@interface UIViewController (Track) - (void)testTrack; - (void)handleTrack:(id)arg withSelector:(NSString*)sel withDict:(NSDictionary*)eventDict; @end@implementation UIViewController (Track) - (void)testTrack {NSLog(@"- (void)testTrack"); }- (void)handleTrack:(id)arg withSelector:(NSString*)sel withDict:(NSDictionary*)eventDict {NSLog(@"- (void)handleTrack");id<AspectInfo> aspectInfo = arg;NSLog(@"\n AspectHandlerBlock [%@]\n \n**-**", [[aspectInfo instance] class]);NSLog(@"\n AspectInfo originalInvocation<%@>, \n<%@>", aspectInfo.originalInvocation, aspectInfo.arguments);//特殊動(dòng)態(tài)處理,動(dòng)態(tài)獲取labelName || eventIDNSString * labelString = eventDict[TrackEvent_Label];NSString * idString = eventDict[TrackEvent_ID];if (eventDict[TrackEvent_Action]) {NSString * actionString = eventDict[TrackEvent_Action]; //!!!!!!!!!!注意在這錯(cuò)誤NSString * tmpString = [self valueForKey:actionString];NSDictionary * trackDict = @{eventDict[TrackEvent_Value]:tmpString};//!nilif (idString && labelString && trackDict) {NSLog(@"--TalkingData trackEvent--%@,%@,%@", idString, labelString, trackDict);}}else if (idString && labelString){NSLog(@"--TalkingData trackEvent--%@,%@", idString, labelString);} } @end

文章參考:
http://objc-zen-book.books.yourtion.com/Chapter12/01-aspect-oriented-programming.html
http://www.jianshu.com/p/0497afdad36d#
http://tech.glowing.com/cn/method-swizzling-aop/
http://www.jianshu.com/p/69859d580354
http://www.bingjie.me/2015/11/05/OC%E4%B8%ADaspect%E5%88%87%E9%9D%A2%E7%BC%96%E7%A8%8B%E5%BA%94%E7%94%A8.html

對(duì)應(yīng)代碼參考:
https://github.com/weng1250/UserStatisticsWithRuntime
https://github.com/okcomp/AspectsDemo
https://github.com/steipete/Aspects
https://github.com/MikeFighting/LogByRunTime

擴(kuò)展學(xué)習(xí) 參考源碼分析 https://github.com/devedbox/AXWebViewController aspect_hookSelector 知識(shí)擴(kuò)展: 【1】 + (void)load{swizzleMethod([self class], @selector(viewDidAppear:), @selector(swizzled_viewDidAppear:)); } 一般情況下,類(lèi)別里的方法會(huì)重寫(xiě)掉主類(lèi)里相同命名的方法。如果有兩個(gè)類(lèi)別實(shí)現(xiàn)了相同命名的方法,只有一個(gè)方法會(huì)被調(diào)用。但 +load: 是個(gè)特例,當(dāng)一個(gè)類(lèi)被讀到內(nèi)存的時(shí)候, runtime 會(huì)給這個(gè)類(lèi)及它的每一個(gè)類(lèi)別都發(fā)送一個(gè) +load: 消息。【2】Runtime object_getIvar 獲得類(lèi)的變量(包括“所謂私有變量”) 轉(zhuǎn)自 http://blog.csdn.net/lvdezhou/article/details/49509805 OBJC_EXPORT id object_getIvar(id obj, Ivar ivar) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);#import <objc/runtime.h> Person * p1 = [[Person alloc] init];Ivar ivar = class_getInstanceVariable([p1 class], "_sex");id sex = object_getIvar(p1, ivar);NSLog(@"%@", sex);//p1.sex=@"girl";結(jié)果為girl

?

轉(zhuǎn)載于:https://my.oschina.net/onepieceios/blog/744946

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專(zhuān)家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的【iOS】【项目全局动态埋点】Runtime+Aspects(hook)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。