Вам необходимо использовать атрибут __autoreleasing
в параметре out:
- (void) barOutString:(NSString * __autoreleasing *)myString {
NSString* foo = [[NSString alloc] initWithString:@"hello"];
*myString = foo;
}
Предварительная документация (на которую я не могу ссылаться из-за NDA) помещает __autoreleasing
всередина двух '*, но она может просто работать как (__autoreleasing NSString **)
Вы также не можете использовать косвенный двойной указатель (b
), как в исходном коде.Вы должны использовать эту форму:
- (void) foo {
NSString* a = nil;
[self barOutString:&a];
NSLog(@"%@", a);
}
Вы также вызываете dealloc
непосредственно на объекте, который является абсолютно неправильным.Я предлагаю вам прочитать рекомендации по управлению памятью.