NSString
C# を使用して作成されたバイトからを抽出できる BinaryReader クラスを Objective-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;
}