gpt4 book ai didi

ios - 如何在Objective-C中识别自定义类与框架类

转载 作者:行者123 更新时间:2023-12-01 20:11:14 25 4
gpt4 key购买 nike

我正在通过Swizzling UIViewController方法viewDidAppearviewDidAppear进行分析项目,代码片段如下,

- (void) swizzledViewDidAppear : (BOOL)animated {
if ([UA isAppInitialized]) { // Check if Analytics Initialized
if ([[self class] isSubclassOfClass:[UIViewController class]]) {
[UA startPage:[NSString stringWithFormat:@"%@", NSStringFromClass ([self class])]];
}
}
[self swizzledViewDidAppear:animated];
}

- (void) swizzledViewDidDisappear : (BOOL)animated {
if ([UA isAppInitialized]) { // Check if Analytics Initialized
if ([[self class] isSubclassOfClass:[UIViewController class]]) {
[UA endPage:[NSString stringWithFormat:@"%@", NSStringFromClass ([self class])]];
}
}
[self swizzledViewDidDisappear:animated];
}

这是我只跟踪自定义ViewController的代码段,例如:MyViewController或FooViewController ... etc,而不是与框架相关的类,如UICompatibilityInputViewController,UIInputWindowController ... etc。

请让我知道如何实现此目标。我试图检查Subclass,但是仍然有一段时间记录了Framework类。

谢谢,
维杰

最佳答案

您可以获取 class 的NSBundle并检查该捆绑包是否属于您。

使用扩展的快速示例:

//code
extension NSObject {
static var isOurClass: Bool {
let appBundle = Bundle.main
let clsBundle = Bundle(for: self.self);
return clsBundle.bundlePath.hasPrefix(appBundle.bundlePath)
}
}

//test
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

print("appdelegate class ours? \(AppDelegate.isOurClass)")
print("NSString class ours? \(NSString.isOurClass)")
return true
}
}

基本objc示例:
#import <Foundation/Foundation.h>

@interface T : NSObject
@end

@implementation T
@end

int main(int argc, char *argv[]) {
@autoreleasepool {
NSBundle *bundleOfApp = [NSBundle mainBundle];
NSLog(@"%@", bundleOfApp.bundlePath);

//ours
T *t = [T new];
NSBundle *bundleOfT = [NSBundle bundleForClass:t.class];
NSLog(@"%@", bundleOfT.bundlePath);

if([bundleOfT.bundlePath hasPrefix:bundleOfApp.bundlePath]) {
NSLog(@"ours");
}

//theirs

bundleOfT = [NSBundle bundleForClass:NSString.class];
NSLog(@"%@", bundleOfT.bundlePath);

if([bundleOfT.bundlePath hasPrefix:bundleOfApp.bundlePath]) {
}
else {
NSLog(@"theirs");
}

}
}

关于ios - 如何在Objective-C中识别自定义类与框架类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37659104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com