1
votes

I'm confused with the use of the following methods of NSString

  1. initWithData:encoding:

    Returns an NSString object initialized by converting given data into Unicode characters using a given encoding.

  2. initWithBytes:length:encoding:

    Returns an initialized NSString object containing a given number of bytes from a given buffer of bytes interpreted in a given encoding.

And their usage is like:

NSMutableData *someData = //some data;
NSString *someString = nil;
  • someString= [[NSString alloc] initWithData:someData encoding:NSUTF8StringEncoding];

  • someString=[[NSString alloc] initWithBytes:[someData mutableBytes] length:[someData length] encoding:NSUTF8StringEncoding];

NSData class is a wrapper for byte buffers, then what is the difference between these similiar methods. Please help me to understand the difference.

1

1 Answers

4
votes

Well, you may have some raw bytes not already wrapped in an NSData object. In that case you can use initWithBytes:length:encoding: without having to wrap it first.