Я пытаюсь передать указатель ivar на метод, а затем поместить значение в этот ivar.Значение места в указателе ivar?
static void placeThis(NSString *thingIn, NSString **here) {
*here = thingIn;
}
- (void) placeThis:(NSString *)thingIn inHere:(NSString **)here {
*here = thingIn;
}
- (void) place:(NSString*)thingIn {
[self placeThis:thingIn inHere:&thing];
placeThis(thingIn, &thing);
NSLog(@"How did that go? %@", thing);
}
Я не знаю, есть ли у меня синтаксис правильно. Я хочу хранить thingIn
в иваре. Текущая ошибка
passing address of non-local object to __autoreleasing parameter for write-back
Возможно ли это сделать, и если да, то каким образом?
Примечание: Это считается плохой идеей, потому что она разрушает инкапсуляцию. Я буду использовать это только в очень локальном контексте.
Примечание: ivar определяется как __strong NSString* thing
(сильный только для наглядности).
удивительный материал. Будут ли какие-либо утечки или другие риски, или это просто свернуто? –
Это не свернуто. ARC должен точно знать, с какими указателями он работает. '__strong' похож на' const' или 'volatile' и' NSString * __strong * 'является указателем на' __strong NSString * 'так же, как' char * const * 'будет указателем на' const char * '. –
Хм, у меня были сомнения, и я проверил. Он не работает точно так же, как 'const', но в этом конкретном случае он появляется. Фактические сведения о том, как это работает, приведены здесь http://clang.llvm.org/docs/AutomaticReferenceCounting.html#ownership.spelling –