2014-01-18 5 views
1

다음 코드와 같은 방식으로 내 인스턴스 변수를 어떻게 정의해야합니까? 여기 myBool은 새로운 내용입니다. iOS 7.0.4에서 Theos/Logos를 사용하고 있습니다. 이것이 가능한가? 어디서나 아무 것도 찾을 수 없습니다. MSHookIvar에 대해 알고 있지만 기존 변수에서만 작동합니다.iOS에 맞춤 ivars 추가하기 tweak

@interface SBApplication { 
    BOOL myBool; 
} 

- (void)setBadge:(id)arg1; 

@end 

%hook SBApplication 

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

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

%end 
+0

관련된 객체는 최대한 사용자가 쉽게 접근 할 수 있습니다. –

답변

2

아니요, 기존 클래스에 ivar를 추가 할 수 없습니다. class_addIvar 함수가 있지만 기존 클래스에서는 작동하지 않습니다. 귀하의 경우에는 SBApplication가 이미 정의되어 있으므로 ivar를 추가 할 수 없습니다.

아주 간단한 해결책 - 정적/전역 변수 (또는 둘 모두)를 제안 할 수 있습니다. 하나의 변수 만 필요하면 예를 들어 BOOL 변수가 될 수 있습니다. 또는 모든 클래스 인스턴스에 대해 변수를 원하면 객체 - 변수 쌍의 배열이 될 수 있습니다. 후자는 클래스 ivar처럼 작동합니다.

+0

나는 실제로 후자와 함께 갔다. 전역 NSMutableDictionary를 만들어 앱 번들 식별자와 함께 키로 사용했습니다. 훌륭하게 작동합니다. – user2274109