The -bytes method returns a pointer to a contiguous region of memory managed by the receiver.
 If the regions of memory represented by the receiver are already contiguous, it does so in O(1) time, otherwise it may take longer
 Using -enumerateByteRangesUsingBlock: will be efficient for both contiguous and discontiguous data.
@property (readonly) const void *bytes NS_RETURNS_INNER_POINTER;

char *dataPtr = (char *) [data bytes];