Я использую objc_setAssociatedObject() таким образом:Правильный формат ключа для objc_setAssociatedObject()
objc_setAssociatedObject(myObject, @"myKey1", obj2, OBJC_ASSOCIATION_ASSIGN);
В частности, мой ключ представляет собой строку символов, поэтому компилятор использует указатель на эту строку. Уточняю ту же строку символов в objc_getAssociatedObject():
objc_getAssociatedObject(myObject, @"myKey1").
Я использую эту схему в течение длительного времени без каких-либо проблем. Тем не менее, примеры на SO используют указатель на статическую переменную, поэтому теперь я понимаю, что мой метод может быть неправильным. Компилятор использует один и тот же указатель каждый раз, поэтому он всегда работает.
Является ли мой метод в порядке? Кажется, это эквивалентно использованию указателя на статическую строку. В каких обстоятельствах компилятор может хранить две разные копии моего ключа?
это может помочь http://stackoverflow.com/questions/1937685/static-nsstring-usage-vs-inline-nsstring-constants – Flexicoder