objective-c - Theos中如何声明子类的成员变量

标签 objective-c jailbreak theos tweak member-variables

例如,当我声明现有类的子类时, 我可以在theos中写如下:

%subclass NEWCLASS: EXISTINGCLASS
- (void)overridemethod {
//code
}

%new(v@:)
- (void)newmethod {
//code
}
%end

但我不知道如何声明新类的成员或属性变量...
我应该做什么?
好的,我明白了。


但是我编译包的时候出现错误..

我编写的代码如下:

%subclass SBIconSubClass: SBIcon

%new
- (NSString *)aString {
    return objc_getAssociatedObject(self, @selector(aString));
}

%new
- (void)setAString:(NSString *)value {
    objc_setAssociatedObject(self, @selector(aString), value, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

- (id)application {
    self.aString = @"Test";
    NSLog(@"%@",self.aString);

    return %orig;
}

%end

和错误:

enter image description here

最佳答案

不可以,不支持 ivars。 您可以做的是使用 objc_getAssociatedObject 和 objc_setAssociatedObject 来模拟属性。

%new
- (BOOL)boolProp {
    NSNumber * _boolProp = objc_getAssociatedObject(self, @selector(boolProp));
    return _boolProp ? [_boolProp boolValue] : NO;
}

%new
- (NSString *)aString {
    return objc_getAssociatedObject(self, @selector(aString));
}

%new
- (void)setBoolProp:(BOOL)value {
    objc_setAssociatedObject(self, @selector(boolProp), @(value), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

%new
- (void)setAString:(NSString *)value {
    objc_setAssociatedObject(self, @selector(aString), value, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

这样您就可以将 boolPropaString 作为属性访问:

inst.boolProp = YES;
if (inst.boolProp) {
    ...
}

inst.aString = @"Hello";

在您的示例中,您还需要定义一个接口(interface):

@interface SBIconSubClass
    - (NSString *)aString;
    - (void)setAString:(NSString *)value;
@end

关于objective-c - Theos中如何声明子类的成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25322246/

相关文章:

ios - 通过 UIWindow 和 UIViewController 传递旋转事件

ios - 在调整错误中增加内存

ios - 是否可以通过 Springboard 调整在 SBApplication 中设置 userInfo?

iOS 10 [CFString 发布] : message sent to deallocated instance

iphone - UITextField 停止 UIGestureRecognizer 工作

ios - NSHomeDirectory 为守护进程返回什么?

ios - iPod/iPhone 时钟的标题是什么?越狱开发?

objective-c - theos mobilesubstrate 调整中的 id 对象,我无法禁用此 -(id)

ios - 是否可以显示UIImage的片段?

iphone - 推送通知中的设备 token