You can use -[NSData initWithBytesNoCopy: length: freeWhenDone:] method to avoid an unneeded memory copy and free(), like the following.
- (id)initWithBase64String:(NSString *)aString
{
NSData *data = [aString dataUsingEncoding:NSASCIIStringEncoding];
size_t outputLength;
void *outputBuffer = NewBase64Decode([data bytes], [data length], &outputLength);
return [self initWithBytesNoCopy:outputBuffer length:outputLength freeWhenDone:YES];
}