objective-c – 在运行时发现哪个类的实例变量被声明为__weak

objective-c – 在运行时发现哪个类的实例变量被声明为__weak,第1张

概述我正在编写一个工具,可以从知道哪个类的实例变量声明__weak中受益. 这些信息必须存在于运行时的某个地方,但有没有办法访问它,记录或以其他方式? (这是一个工具,所以我不太关心它打破更新) 好吧,这是一个使用自定义对象实现的示例实现,它执行初步检查以查看iVar是否弱: BOOL iVarIsWeak(Class cls, Ivar ivar){ id classInstance = 我正在编写一个工具,可以从知道哪个类的实例变量声明__weak中受益.

这些信息必须存在于运行时的某个地方,但有没有办法访问它,记录或以其他方式? (这是一个工具,所以我不太关心它打破更新)

解决方法 好吧,这是一个使用自定义对象实现的示例实现,它执行初步检查以查看iVar是否弱:

BOol iVarIsWeak(Class cls,Ivar ivar){    ID classInstance = [cls new];    // our custom base class properly tracks reference counting,no weird voodoo    ID refCounter = [CustomBaseClass new];    object_setIvar(classInstance,ivar,refCounter);    if ([refCounter refCount] == 2)    {        return NO;    }    return YES;}

上面的代码用于启用ARC,而以下自定义对象代码不是:

@interface CustomBaseClass : NSObject+(ID) new;+(ID) alloc;-(ID) init;-(ID) retain;-(voID) release;-(ID) @R_404_6843@release;-(voID) dealloc;-(ID) description;-(unsigned) refCount;@end// easy way to get sizeofstruct CustomBaseClassAsstruct {    voIDPtr isa;    unsigned volatile refcount;};@implementation CustomBaseClass{    unsigned volatile  refcount;}+(ID) new{    return [[self alloc] init];}+(ID) alloc{    struct CustomBaseClassAsstruct *results =  malloc(sizeof(struct CustomBaseClassAsstruct));    results->isa = self;    results->refcount = 0;    return (ID) results;}-(ID) init{    [self retain];    return self;}-(ID) retain{    ++refcount;    return self;}-(voID) release{    if (--refcount == 0)        [self dealloc];}-(ID) @R_404_6843@release{    // sample implementation of @R_404_6843@release    dispatch_async(dispatch_get_current_queue(),^{        [self release];    });    return self;}-(unsigned) refCount{    return refcount;}-(voID) dealloc{    free(self);    // no call to [super dealloc],we are using custom memory-managment}@end

这仅适用于弱iVars.使用unsafe_unretained变量,它会产生误报,我最好的猜测是因为__weak信息在运行时保存,而unsafe_unretained信息则没有.

我希望这有帮助!

总结

以上是内存溢出为你收集整理的objective-c – 在运行时发现哪个类的实例变量被声明为__weak全部内容,希望文章能够帮你解决objective-c – 在运行时发现哪个类的实例变量被声明为__weak所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1025631.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存