그래서, 내가 개발 및 OBJ C를 조정할하는 새로운 그리고 난이 코드내 코드에 어떤 문제가 있습니까? (OBJ C 팅겨 개발)
%hook SBWallpaperEffect
-(void)setStyle: (NSInteger)arg1{
arg1 = 5;
}
%end
와 도크의 스타일을 변경하기 위해 노력하고있어하지만이 작동하지 않습니다. 내가 도대체 뭘 잘못하고있는 겁니까?
그래서, 내가 개발 및 OBJ C를 조정할하는 새로운 그리고 난이 코드내 코드에 어떤 문제가 있습니까? (OBJ C 팅겨 개발)
%hook SBWallpaperEffect
-(void)setStyle: (NSInteger)arg1{
arg1 = 5;
}
%end
와 도크의 스타일을 변경하기 위해 노력하고있어하지만이 작동하지 않습니다. 내가 도대체 뭘 잘못하고있는 겁니까?
좋아, 그래서 메신저는 NSInteger를 long long 대신 사용했다. 이처럼 : 또한
- (void)setStyle:(long long)arg1;
, 내가
SBWallpaperEffect
대신
을 사용하고 있었고, 난이SBWallpaperEffectView
그래서 % 원 ë 내부의 값을 설정 한한다, 이것이 올바른 방법입니다 :
%hook SBWallpaperEffectView
- (void)setStyle:(long long)arg1{
arg1 = 5;
%orig(arg1);
return;
}
%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;
}
또는 (매개 변수없이)이 같은 :
myInteger = [self getStyle:myInteger];
// or
myInteger = [self getStyle];
을 지금 myInteger
B도됩니다
-(NSInteger)getStyle{
return 5;
}
하고 싶은 전화 e 5. 도움이 되었으면 좋겠다.
더 많은 단서를 추가하여 문제를 해결할 수 있습니까? 당신의 함수'- (void) setStyle : (NSInteger) arg1 { arg1 = 5; }'사실입니다. –
@CuongNguyen 이것은 모든 코드입니다. 숫자 5는 arg1로 설정하여 도크 스타일을 부드럽게 흐리게 변경하거나 14로 변경하면 noctis처럼 어둡게 만들었습니다. 하지만 내 코드는 작동하지 않습니다. 그것은 플렉스 tho에서 작동합니다 – Saeed