『IOS』Property with 'retain (or strong)' attribute must be of object type

本文介绍如何解决AFNetworking2.0在DeploymentTarget低于6.0时遇到的dispatch_queue_t属性错误问题,通过条件编译实现不同版本SDK间的兼容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AFNetworking 2.0 当Deployment Target 低于6.0时,AFURLConnectionOperation.h,AFURLSessionManager.h

@property (nonatomic, strong) dispatch_queue_t completionQueue;

由于sdk低于6.0时,dispatch_queue_t  ARC没有托管,出现提示错误

 Property with 'retain (or strong)' attribute must be of object type

修改为

#if OS_OBJECT_USE_OBJC
@property (nonatomic, strong) dispatch_queue_t completionQueue;
#else
@property (nonatomic, assign) dispatch_queue_t completionQueue;
#endif

### #pragma RETAIN 编译指令解析 #### 定义与作用 `#pragma retain` 是一种编译指示符,在Objective-C编程环境中用于影响对象生命周期管理。当声明变量时加上 `retain` 指令,则该变量会在其作用域内被自动保留(增加引用计数),直到超出此范围才会释放[^2]。 需要注意的是,实际开发过程中很少直接使用此类低级机制来控制内存,因为现代iOS应用通常依赖于ARC(Automatic Reference Counting),即自动引用计数技术来进行更高效且安全的对象生命期管理[^1]。 然而,在某些特定情况下,比如处理一些较老版本的API或者是自定义类库的时候可能会遇到这样的语法结构。此时理解这些命令背后的工作原理对于调试以及维护旧代码非常重要。 #### 使用场景举例 假设存在一段未启用ARC模式下的代码片段: ```objective-c #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wunused-variable" #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { id obj; // 开始retain区域 #pragma retain begin obj = [[NSObject alloc] init]; NSLog(@"Object retained count: %lu", (unsigned long)[obj retainCount]); // 结束retain区域 #pragma retain end NSLog(@"After leaving the scope, object should be released."); } return 0; } #pragma clang diagnostic pop ``` 上述例子展示了如何通过 `#pragma retain` 来手动调整局部变量在其有效范围内保持存活状态。不过值得注意的是这段代码仅适用于非ARC环境下测试学习目的,并不适合生产环境中的新项目开发[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值