代理和 ARC,不兼容?

     2023-02-16     236

关键词:

【中文标题】代理和 ARC,不兼容?【英文标题】:Proxies and ARC, incompatible? 【发布时间】:2012-05-02 08:27:16 【问题描述】:

我正在尝试为数据库存储过程实现代理。这个想法是让我的代码在数据库中找到一系列存储过程,然后在内存中创建一个代理对象,该对象将实现与这些存储过程匹配的方法。该代理对象可以从 NSProxy 或 NSObject 派生,两者都应该工作。基本思想是,对我的代理对象进行的任何方法调用都将转到 resolveInstanceMethod: 并在该方法调用与数据库中的存储过程匹配时进行处理。

但在接近我的目标之前,我对 ARC 似乎不允许我对未声明的方法进行方法调用感到困惑。回到 ARC 之前的日子,我们从编译器收到类似“对象可能不响应选择器”的警告,就是这样,但启用 ARC 后,我收到一个编译器错误,提示“选择器没有已知的实例方法.. ."。如果我首先将代理对象强制转换为 (id),也会发生这种情况。

这一切似乎都在暗示 ARC 与方法的运行时发现不兼容,这是 Objective-c 的基本特征之一。似乎要求所有使用的方法都必须在编译之前在接口中声明,就像在 C++ 中一样。

或者,更有可能的是,我错过了一些重要的东西。如果有,是什么?

已编辑以包含代码:

int main(int argc, const char * argv[])


@autoreleasepool 

    // insert code here...
    NSLog(@"Hello, World!");


    MyTargetClass *mtc = [[MyTargetClass alloc] init];
    [mtc doSomething];

return 0;

MyTargetClass 不包含任何内容:

@interface MyTargetClass : NSObject

@end

如果在非 ARC 项目中,[mtc doSomething] 调用会引发警告,但会引发 ARC 编译器错误。恕我直言,这意味着如果使用 ARC,我无法在运行时向类添加方法。

【问题讨论】:

【参考方案1】:

mwehlou,

首先,如果您不向我们展示任何代码,那么真的很难帮助您。

其次,如果您知道您将提供实例方法,那么您可以使用以下#pragmas 使警告静音:

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"

[Your Selector Based Code Here]

#pragma clang diagnostic pop

如果那是警告符号,那么您可以在 Xcode 的构建设置中找到它。

安德鲁

【讨论】:

我在问题中添加了代码,但如您所见,代码是 100% 微不足道的。问题是,如果使用 ARC,非 ARC 下的警告可以被您的 pragma 抑制,这将是一个彻底的错误。 没有什么可以阻止您在 ARC 项目中动态地向对象添加方法。编译器反对您缺少定义的方法。传统上,这是使用 -performSelector:withObject: 消息处理的。 ARC 需要知道方法中使用的命名约定以及它是否返回值。 (是的,我知道编译器可以根据您使用它们的方式推断出这些类型,但 Apple 选择不这样做。) mwhelou,我想知道为什么添加没有标题的方法对您很重要?非 ARC 代码上的警告表明您正在进入 Objective-C 的极端情况。由于有一个几乎微不足道的修复,为什么使用未定义的消息有用?此外,您可以按文件关闭 ARC。在构建阶段对文件使用 -fno-objc-arc。安德鲁 这个想法是动态地为数据库存储过程创建一个代理对象。这些方法将根据在数据库中找到的过程来添加。 “performSelector”真的很难看,因为这些存储过程可以有许多不同类型的参数。 ——马丁

如何实现与 ARC 兼容的 Objective-C 单例?

】如何实现与ARC兼容的Objective-C单例?【英文标题】:HowdoIimplementanObjective-CsingletonthatiscompatiblewithARC?【发布时间】:2011-11-2600:06:16【问题描述】:如何转换(或创建)在Xcode4.2中使用自动引用计数(ARC)时编译和行为正确的单例类... 查看详情

ios中arc项目兼容mrc

iOS项目中MRC和ARC项目的代码兼容问题:1.ARC项目中导入MRC第三方类的时候要在此类上添加-objc-arc。2.MRC项目中导入ARC类的时候要在次类上添加-fno-bojc-arc。步骤如下:a.点击项目中的tagart->BulidPhases->CompileSource->双击要修改模... 查看详情

arc音频回传功能需要投影支持吗

...去使用额外复合音频线或光纤线缆的必要.使用hdmi线缆将兼容arc的a/v接收器与兼容arc的电视机连接,可以实现以下操作:1.将音频从电视机发送到a/v接收器.2.观看和收听来自源设备的电影和其他内容,其信号可通过a/v接收器在电视上... 查看详情

Teamcity - 代理配置不兼容

】Teamcity-代理配置不兼容【英文标题】:Teamcity-IncompatibleAgentconfiguration【发布时间】:2014-01-1804:47:05【问题描述】:我正在尝试在TeamCity中创建构建配置。我确实正确设置了代理,并且我之前确实有许多项目在TeamCity上正常运行... 查看详情

MPMoviePlayerController 不播放任何视频内容 [由于 ARC 和内存管理]

】MPMoviePlayerController不播放任何视频内容[由于ARC和内存管理]【英文标题】:MPMoviePlayerControllernotplayinganyvideocontent[duetoARCandmemorymanagement]【发布时间】:2012-07-0616:03:21【问题描述】:我正在尝试在iOS应用程序中播放视频,当用户按... 查看详情

ARC 和自动释放

】ARC和自动释放【英文标题】:ARCandautorelease【发布时间】:2013-07-1004:35:05【问题描述】:autorelease用于返回的函数对象,因此调用者不拥有所有权,被调用者将来会释放该对象。但是,ARC能够计算调用者的所有权并在使用后释... 查看详情

delphi中arc内存管理的方向

...和语言的整体感知而言,有很多讨论新Delphi与当前语言的兼容性。最终出现的决定是保持极高程度的兼容性,并采用一些重要而大胆的步骤来实现更能吸引新一代开发人员的语言。 什么是自动 查看详情

uBlock和代理socks5 firefox插件的兼容性问题

】uBlock和代理socks5firefox插件的兼容性问题【英文标题】:CompatibilityproblembetweenuBlockandproxysocks5firefoxaddon【发布时间】:2021-01-2010:03:46【问题描述】:为了在我的代理之间轻松切换,我使用Firefox(https://addons.mozilla.org/fr/firefox/addon/sw... 查看详情

为啥 ARC 在 popViewController 之后不释放内存

...-02-1908:36:11【问题描述】:我正在UINavigationController中推送和弹出ViewController。我正在跟踪我的应用程序的内存消耗。在推送新的 查看详情

arc8world—加密nft+元宇宙构建赋能新未来

...中心化衍生品合约,采用改进的NFTs机枪池模式3.完全兼容以太坊的web3js接口API,它与EVMDao和智能合约完全兼容4.结合NFT+盲盒+链游的独立创新性玩法Arc8World—加密NFT+元宇宙构建赋能新未来Arc8World是一个集“NFT+Bl... 查看详情

arc8world—加密nft+元宇宙构建赋能新未来

...中心化衍生品合约,采用改进的NFTs机枪池模式3.完全兼容以太坊的web3js接口API,它与EVMDao和智能合约完全兼容4.结合NFT+盲盒+链游的独立创新性玩法Arc8World—加密NFT+元宇宙构建赋能新未来Arc8World是一个集“NFT+Bl... 查看详情

ARC 和内存问题

】ARC和内存问题【英文标题】:ARCandmemoryIssue【发布时间】:2013-11-1905:01:42【问题描述】:ARC在我的项目中启用,我在本网站的一篇文章中发现Cocoa在主线程上为您创建了一个自动释放池,但在后台线程上没有为您做任何事情。... 查看详情

ARC 是不是支持调度队列?

...:即使您实现了一个垃圾收集应用程序,您仍然必须保留和释放您的调度队列和其他调度对象。GrandCentralDispatch不支持用于回收内存的垃圾收集模型。我知道ARC不是垃圾收集器,但我想确定我不需要d 查看详情

兼容模式下ie9和ie10显示样式在不兼容模式下为啥不加载css样式?

...\x0d\\x0a另外一个可能的原因,可能是你在电脑里面安装了代理软件或者其他什么与代理相关的软件,如wallproxy之类的,这一类软件可能会在打开本地HTML文件时修改mime类型,把type替换为stain之类,这个没有什么特别好的解决方法... 查看详情

转向arc的说明——翻译apple官方文档

...对OC对象自动管理内存。ARC让开发者专注于感兴趣的代码和对象的关系,而不用考虑对象的retain和release。原文地址概要ARC在编译时期添加代码,保证对象可用。概念上说,ARC遵循手动引用计数的规则,替开发者在编译时期添加合... 查看详情

xcode禁用arc(automaticreferencecounting)

...maticReferenceCounting,自动引用计数,即ARC,可以说是WWDC2011和iOS5所引入的最大的变革和最激动人心的变化。ARC是新的LLVM3.0编译器的一项特性,使用ARC,可以说一举解决了广大iOS开发者所憎恨的手动内存管理的麻烦。在工程中使用A... 查看详情

斯威夫特:CGPathRelease 和 ARC

】斯威夫特:CGPathRelease和ARC【英文标题】:Swift:CGPathReleaseandARC【发布时间】:2014-09-1401:17:22【问题描述】:刚刚更新到XcodeBeta4,发现下面的代码出现以下编译器错误:varpath=CGPathCreateMutable()...CGPathRelease(path)\'CGPathRelease\'不可用... 查看详情

NSString 到 CFStringRef 和 CFStringRef 到 ARC 中的 NSString?

】NSString到CFStringRef和CFStringRef到ARC中的NSString?【英文标题】:NSStringtoCFStringRefandCFStringReftoNSStringinARC?【发布时间】:2013-06-1802:51:23【问题描述】:我想了解从ARC中的CFStringRef获取NSString的正确方法?反方向也一样,ARC中CFStringRef... 查看详情