DaffodilGirl 2013-06-03 05:35 采纳率: 0%
浏览 1399

iPhone-alloc方法出现问题

为了SObject捕捉alloc:

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

在其他方法中执行都正常,只有在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
  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2022-12-26 17:33
    关注

    看起来你正在尝试使用method swizzling来自定义NSObject的alloc方法。


    在调用method_exchangeImplementations函数时,你交换了allocCustom和alloc方法的实现。这意味着在你的代码中调用[NSObject alloc]时,实际上调用的是allocCustom方法。


    但是,在allocCustom方法的实现中,你再次调用了[self allocCustom],这会导致递归调用,因此永远不会输出“no way”。


    如果你希望在alloc方法被调用时执行一些自定义操作,你可以在allocCustom方法中实现它,然后使用[super alloc]来调用父类的alloc方法。例如:

    (id)allocCustom {
        NSLog(@"%s", FUNCTION); // will be output
    // Perform custom actions here
    return [super alloc];
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多
  • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件
  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入