【问题标题】:iOS5 ARC errors: SKPSMTPMessageiOS5 ARC 错误:SKPSMTPMessage
【发布时间】:2012-03-04 00:07:26
【问题描述】:

我正在尝试将此bit of code 合并到一个新的(iOS 5)项目中...问题是,我使用的是 ARC,它真的不喜欢编写的代码。

我已经能够解决大部分错误,但我遇到了 3 个我似乎无法弄清楚的错误。

错误 #1:

unsafe_unretained 属性 'delegate' 的现有 ivar 'delegate' 必须是_unsafe_unretained

.h

@interface SKPSMTPMessage : NSObject {  
    NSOutputStream *outputStream;
    NSInputStream *inputStream;

    id <SKPSMTPMessageDelegate> delegate;
}

@property(nonatomic, assign) id <SKPSMTPMessageDelegate> delegate;

.m

@synthesize login, pass, relayHost, relayPorts, subject, fromEmail, toEmail, parts, requiresAuth, inputString, wantsSecure, \
delegate, connectTimer, connectTimeout, watchdogTimer, validateSSLChain;

错误 #2 和 #3:

将非本地对象的地址传递给_autoreleasing参数 回写

.h

@interface SKPSMTPMessage : NSObject {  
    NSOutputStream *outputStream;
    NSInputStream *inputStream;

    id <SKPSMTPMessageDelegate> delegate;
}

.m

[NSStream getStreamsToHostNamed:relayHost port:relayPort inputStream:&inputStream outputStream:&outputStream];

任何指导将不胜感激。

谢谢。

【问题讨论】:

标签: ios5 automatic-ref-counting


【解决方案1】:

我已经为这个问题找到了正确的解决方案。

答案是:不用自己手动转换代码。

您只需要在导入的类中添加编译器标志-fno-objc-arc

【讨论】:

    【解决方案2】:

    错误 #1
    替换

    @property(nonatomic, assign) id <SKPSMTPMessageDelegate> delegate;
    

    @property(nonatomic, _unsafe_unretained) id <SKPSMTPMessageDelegate> delegate;
    

    您不能将 assign 与 ARC 一起使用

    错误 #2,3
    尽量不要使用 allocinit outputStreaminputStream 变量。

    NSInputStream *inputStream;
    NSOutputStream *outputStream;
    [NSStream getStreamsToHostNamed:relayHost port:relayPort inputStream:&inputStream outputStream:&outputStream];
    

    【讨论】:

    • 谢谢...实际上我最终只是为该库禁用了 ARC。
    • 每当我为我的“SKPSMTPMessage.m”文件禁用 ARC 时(假设禁用是添加编译器标志“-fno-objc-arc”时发生的情况)我只是得到一个 Apple Mach-O 链接器错误提示找到重复的符号。你有这个错误吗?如果是这样,你是如何绕过它的?!?如果没有,我做错了什么?马特
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    • 2012-02-27
    • 1970-01-01
    • 2012-02-09
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多