LLDB의 교묘한 음란물

4642 단어
인쇄 뷰 수준
이것은 많은 사람들이 할 수 있을 거라고 믿는다. 타면 타다recursiveDescription용법은 대략 다음과 같다
1
2
3
po [self.view recursiveDescription]

po [[[UIApplication sharedApplication] keyWindow] recursiveDescription]

Expression 대법
이 Blog은 기본적으로 이 명령을 둘러싸고 전개될 것이다. 이 명령은 신기한 명령이다.본인은 재능이 부족하고 학문이 얕기 때문에, 이 명령을 어떻게 소개해야 할지 모르니, 한마디로 말하자면, 그의 기능은 표현식을 집행하는 것이다.
이 명령을 사용하면 기본적으로 꽃을 피울 수 있고 일반적인 방법 함수는 모두 LLDB에서 호출할 수 있다.
UI 스타일 업데이트
먼저 저는 Xcode가 자체로 가지고 있는 Debug View Hierarchy 기능을 사용하는 것을 좋아하기 때문에 이 Debud 과정에서 UI를 어떻게 동적으로 수정하는지 말씀드리겠습니다.
간단하게 설명하자면, 대상 가져오기 -> 대상 호출 방법 (스타일 변경) -> 렌더링
  • 대상 선택에 수정이 필요한 컨트롤을 가져옵니다. 오른쪽 표시줄에 있는 Object inspector를 보십시오. 여기에서 Address 속성을 볼 수 있습니다. 이것을 절반으로 성공했습니다. 다음은 코딩입니다.여기에 이것Address0x7fcef0c19290
  • 라고 가정해 보세요.
  • 대상에 대한 호출 방법(스타일 변경) 예를 들어 배경색을 바꾸고 싶다면 e (void)[0x7fcef0c19290 setBackgroundColor:[UIColor blueColor]].이것 은 비교적 자유롭고 직접적 인 필법 으로 한 걸음 한 걸음 쓸 수도 있다
    1
    2
    3
    4
    5
    e UIView * $myView = (UIView *)0x7fcef0c19290

    e $myView.backgroundColor = [UIColor yellowColor]
    // ,
    //e (void)[$myView setBackgroundColor:[UIColor yellowColor]]

  • 렌더링을 하고 나면 난용이 없다는 것을 알게 될 것이다. 그래, 마지막 단계가 남았어. 렌더링.e (void)[CATransaction flush]방방, 배경색이 바뀐 거 보이죠?
  • 이상은 2단계에서 꽃을 가지고 놀 수 있는데, 네가 어떻게 노느냐에 달려 있다.
    구속 강제 새로 고침
    그래서 저는 제가 노는 악취미, 배경색 등 기본적인 스타일을 바꿀 수 있다는 것에 만족하지 않고 제약을 바꿔서 놀고 싶습니다.
    우선 천진해서 Masonry 코드를 직접 넣었어요.
    1
    2
    3  LLDB span>
    e (void)[$view mas_updateConstraints:^(MASConstraintMaker *make) {
    make.height.equalTo(@20);
    }];
    LLDB 나에게 unrecognize、undefined 같은 정보를 타당하게 알려주었다.
    그래, 난 원생의 구속법으로 하면 되겠지.
    1
    e NSLayoutConstraint * $constraint = [NSLayoutConstraint constraintWithItem:$view attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeHeight multiplier:1.0f constant:100.0f]

    결과LLDB는 내가 모른다고 말했다NSLayoutAttributeHeight、NSLayoutRelationEqual. 나는 차오야. 그래, 네가 가로로 할게. 나는 매거에 대응하는 수치를 찾아냈다.
    1
    e NSLayoutConstraint* $constraint = [NSLayoutConstraint constraintWithItem:$test attribute:8 relatedBy:0 toItem:nil attribute:8 multiplier:1 constant:80.0f]

    ok, 이 구속 변수는 드디어 생성되었다. 쉽지 않다. 그 다음에 구속을 가했다.
    1
    e (void)[$view addConstraint:$constraint]

    그래, 덧붙였어. 그런데 타당한 구속 충돌이야. 원래 고도의 구속이 있었잖아. 그래서 원래의 구속 목록을 계속 얻고 새 변수는 원래의 구속을 가리키며 삭제하고 끝내자.
    1
    2
    3
    4
    po [$view constraints]
    e NSLayoutConstraint* $oldConstraint = (NSLayoutConstraint*)0x6080000b34a0
    e (void)[$test removeConstraint:$oldConstraint]
    e (void)[CATransaction flush]

    그리고 새로운 제약을 가리키는 지침을 통해 즐겁게 바꿀 수 있다constant
    1
    2
    e $constraint.constant = 20
    e (void)[CATransaction flush]

    물론 당신이 제약만 수정하려고 한다면 새로운 변수에서 [$view constraints]의 어떤 제약을 가리키고 유쾌하게 수정할 수 있다. 이렇게 번거롭게 원래의 것을 삭제하고 새로운 것을 만들고 새로운 제약을 추가할 필요가 없다. 그야말로 나무라다
    이 코드 힌트는 거의 지원되지 않는데, 내가 사용하는 방식이 틀린 거야???
    인용하다
    ObjC 중국

    좋은 웹페이지 즐겨찾기