iphone - "alloc"的方法调配?

标签 iphone ios objective-c objective-c-runtime

我尝试使用方法调配来捕获 NSObject 泛型的“alloc”。

NSObject *obj = [[NSObject alloc] init];
UIView *view  = [[UIView alloc] initWithFrame:CGRectZero];
NSString *str = [[NSString alloc] init];
[...]

这是实现(类别 .m),适用于所有其他方法NSObjet 上的 alloc 除外

可能是什么原因?

#import "NSObject+Custom.h"
#import <objc/runtime.h>

@implementation NSObject (Custom)

+ (void)load
{
  Method original = class_getInstanceMethod(self, @selector(alloc));
  Method swizzle  = class_getInstanceMethod(self, @selector(allocCustom));
  method_exchangeImplementations(original, swizzle);
}

- (id)allocCustom
{
  NSLog(@"%s", __FUNCTION__); // no way
  return [self allocCustom];
}

@end

谢谢。

最佳答案

+alloc 是类方法,不是实例方法:

  • 使用 class_getClassMethod 代替 class_getInstanceMethod
  • +allocCustom 代替 -allocCustom

关于iphone - "alloc"的方法调配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16811461/

相关文章:

ios - 在项目中使用多个 Storyboard时无法创建展开转场

ios - iOS 中的 Google Drive 集成在调用插入时出错

objective-c - 如何让 CATextLayer 平滑其文本?

iphone - 如何从 Objective C 中的导入类调用方法?

iphone - 适用于 iOS 的 3D 对象/增强现实库

ios - 如何判断 WKWebView 是否正在播放音频?

ios - UIScrollView 初始化时的内容偏移

iphone - iTunes文件共享-如何上传不同的文件夹?

android - 适用于 iOS/Android 的可重排 epub SDK

ios - UILabel 未使用自动布局调整大小