我在 Objective-C 中编写了一个 BinaryReader 类,它可以NSString
从使用 C# 创建的字节中提取一个BinaryWriter.Write(string)
。它似乎工作得很好,但是当我打电话时:
BinaryReader *binaryReader = [[BinaryReader alloc] initWithData:dataArray];
NSString *strName = [binaryReader readString];
// strName is not nil, but the value is no longer correct (seems to have been erased)
我进入了 readString 方法,一切看起来都很好(字符串是正确的),直到方法返回(我认为 ARC 正在启动)。
为什么会发生这种情况?
这是我的 readString 方法:
-(NSString *)readString
{
NSUInteger bytesCount = (NSUInteger)[self read7BitEncodedInt];
const void *byteData = [_data bytes] + _dataIndex;
NSString *returnValue =
[[NSString alloc] initWithBytes:byteData length:bytesCount encoding:NSUTF8StringEncoding];
_dataIndex += bytesCount;
return returnValue;
}
在returnValue
方法返回之前包含正确的字符串。
根据要求,这是我的 BinaryReader 的初始化函数。
-(id)initWithData:(NSData *)theData
{
self=[super init];
if(self != nil)
{
_dataIndex = 0;
_data = theData;
}
return self;
}
和标题的相关部分
@interface BinaryReader : NSObject
{
@private
NSData *_data;
int _dataIndex;
}