我的代码有什么问题? (obj c 调整开发)

What's wrong with my code? (obj c tweak development)

所以,我是调整开发和 obj c 的新手,我正在尝试使用此代码更改停靠栏的样式

%hook SBWallpaperEffect
-(void)setStyle: (NSInteger)arg1{
    arg1 = 5;
}
%end

但是没用。我做错了什么?

好的,我认为这是许多程序员面临的典型指针问题。您将 NSInteger 传递给函数,而 arg1 是传入值的 copy。换句话说,无论您如何更改 arg1函数,原变量不变。

为了让事情更清楚,请看下面的代码片段:

NSInteger myInteger = 0;
NSInteger arg1;
arg1 = myInteger;
arg1 = 5;
// myInteger is still 0!

更改 arg1 不会更改 myInteger 的值,这就是您在函数中所做的。 arg1 复制传入的整数值,设置为5,然后在函数结束时释放。

相反,试试这个:

-(void)setStyle:(NSInteger *)arg1{
    arg1 = 5;
}

然后像这样调用函数:

NSInteger myInteger = 0;
[self setStyle:&myInteger];
//myInteger is now 5!

现在你会得到你想要的结果。

如果你不想处理这些乱七八糟的指针东西,使用函数的返回值来传递数字,如下所示:

-(NSInteger)getStyle:(NSInteger)arg1{
    // do some calculation
    arg1 += 5;
    return arg1;
}

或类似这样的东西(没有参数):

-(NSInteger)getStyle{
    return 5;
}

并这样称呼它:

myInteger = [self getStyle:myInteger];
//  or
myInteger = [self getStyle];

现在 myInteger 也将是 5。希望这对您有所帮助:)

好的,所以我发现我使用的是 NSInteger 而不是 long long。像这样:

  • (void)setStyle:(long long)arg1;

此外,我正在使用

SBWallpaperEffect

而不是

SBWallpaperEffectView

我应该在 %orig

中设置值

所以,正确的写法是:

%hook SBWallpaperEffectView
- (void)setStyle:(long long)arg1{
    arg1 = 5;
    %orig(arg1);
    return;
}
%end