因此,我已閱讀this問題,這似乎正是我遇到的問題,但該帖子中的答案無法解決我的問題。我正試圖編寫一個數據序列化子類NSMutableData
。有問題的函數頭看起來是這樣的:使用ARC的輸出參數
-(void)readString:(__autoreleasing NSString **)str
我做的函數來獲取特定的一些數據操縱字節對應於數據流中的下一個字符串,然後我把這個行:
*str = [[NSString alloc] initWithData:strData encoding:NSUTF8StringEncoding];
此代碼沒有錯誤。但是,當我嘗試調用像這樣的功能:
+(id) deserialize:(SerializableData *)data
{
Program *newProgram = [[Program alloc] init];
[data readString:&(newProgram->programName)];
就行了,我實際上調用該函數,我得到以下錯誤:
Passing address of non-local object to __autoreleasing parameter for write-back
我試圖放置__autoreleasing
前面NSString
聲明,在第一個*
之前,和兩個*
之間,但所有配置都會生成錯誤。
我在閱讀其他問題時是否錯過了某些內容,或者自該帖子發佈以來ARC編譯器中的某些內容發生了更改?
編輯:
看來這個問題是從我試圖訪問字符串的方式到來。我可以解決它通過做這樣的事情:
NSString* temp;
[data readString&(temp)];
newProgram.programName = temp;
但我寧願要伊娃
您不能直接使用伊娃,因爲分配的值將被自動釋放。 Autorelease對於ivars來說總是一個壞主意,所以ARC允許它。用你的本地變量'temp',ARC將添加所需的保留。 –