Ключ для objc_setAssociatedObject продолжает изменять адрес

Я пытаюсь создать ключ для использования в objc_setAssociatedObject, как в этом вопросе:

Как мне использовать objc_setAssociatedObject / objc_getAssociatedObject внутри объекта?

I есть файл MyConstants.h, который определяет

static NSString *myConstant = @"MyConstant";

. Затем этот файл включается в MyFramework через MyFramework.h

#import ...;
#import "MyConstants.h"
#import ...;

Затем в моем проекте структура включается во все файлы через заголовок .pch.

#import 
#import 

Все это работает как ожидается. Проблема в том, что когда я вызываю objc_setAssociatedObject или objc_getAssociatedObject с myConstant в качестве ключа, это не работает. Причина достаточно ясна из журнала:

- (void)doSomething:(id)key { //Gets called with myConstant
    NSLog(@"Associating with key at %p", &key);
    objc_setAssociatedObject(self, &key, object, policy);
}
- (void)doSomethingElse:(id)key { //Gets called with myConstant
    NSLog(@"Seeking association for key at %p", &key);
    NSLog(@"Will find %@", objc_getAssociatedObject(self, &key));
}

Какие журналы:

Associating with key at 0x7fff5fbfecdf
Seeking association for key at 0x7fff5fbfecef
Will find (null)

Вы заметите, что указатели сдвигаются.

Однако повторный вызов того же метода показывает те же указатели. Это как если бы константа ЯВЛЯЕТСЯ константой в файле, который ее импортирует, но не для всего проекта .

Q: Как я могу правильно определять и импортировать заголовки с константами, чтобы константа на самом деле была в постоянном месте в памяти?

6
задан Community 23 May 2017 в 11:59
поделиться