Добавление пользовательских иваров в твик iOS

Как мне определить свои собственные переменные экземпляра в чем-то вроде следующего кода в настройке? Здесь myBool новый. Я использую Theos/Logos с iOS 7.0.4. Это возможно? Нигде ничего не могу найти об этом. Я знаю о MSHookIvar, но он работает только с существующими переменными.

@interface SBApplication {
    BOOL myBool;
}

- (void)setBadge:(id)arg1;

@end

%hook SBApplication

- (void)setBadge:(id)arg1 {
    %orig;

    if(myBool == NO){
        NSLog(@"myBool is NO");
    }
}

%end

person user2274109    schedule 18.01.2014    source источник
comment
Связанные объекты настолько близки, насколько это возможно.   -  person Richard J. Ross III    schedule 18.01.2014


Ответы (1)


Нет, я не думаю, что вы можете добавить ivar в существующий класс. Есть функция class_addIvar, но она не работает с существующими классами. В вашем случае SBApplication уже определено, поэтому вы не можете добавить в него ивар.

Я могу предложить очень простое решение - статические/глобальные (или обе) переменные. Это может быть, например, переменная BOOL, если вам нужна только одна переменная. Или это может быть массив пар объект-переменная, если вам нужна переменная для каждого экземпляра класса. Последний будет работать так же, как класс ivar.

person creker    schedule 18.01.2014
comment
Я пошел с последним, на самом деле. Я сделал глобальный NSMutableDictionary и использовал его с идентификаторами пакетов приложений в качестве ключей. Прекрасно работает. - person user2274109; 19.01.2014