2012-08-10 2 views
0

Я пытаюсь передать указатель 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 (сильный только для наглядности).

ответ

1

Вы должны использовать NSString * __strong * как тип here

И да, это не очень хорошая идея, чтобы сделать такие вещи.

+0

удивительный материал. Будут ли какие-либо утечки или другие риски, или это просто свернуто? –

+1

Это не свернуто. ARC должен точно знать, с какими указателями он работает. '__strong' похож на' const' или 'volatile' и' NSString * __strong * 'является указателем на' __strong NSString * 'так же, как' char * const * 'будет указателем на' const char * '. –

+0

Хм, у меня были сомнения, и я проверил. Он не работает точно так же, как 'const', но в этом конкретном случае он появляется. Фактические сведения о том, как это работает, приведены здесь http://clang.llvm.org/docs/AutomaticReferenceCounting.html#ownership.spelling –

Смежные вопросы