我的代码有什么问题? (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
所以,我是调整开发和 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