UIKit.framework二进制文件在哪里

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore 

查了很多是上面这个。

下面是UINavigationController的一些伪源码

[UINavigationController popToRootViewControllerAnimated ]什么时候返回空值

这是声明 popToRootViewControllerAnimated

- (nullable NSArray<__kindof UIViewController *> *)popToRootViewControllerAnimated:(BOOL)animated; 
// Pops until there's only a single view controller left on the stack. Returns the popped controllers.

但没有说返回nil是怎么回事

hopper 一下 uikit

UIKit.framework二进制文件在哪里

 /System/Library/Frameworks/UIKit.framework/UIKit   这个找不到

/System/Library/PrivateFrameworks/UIFoundation.framework/UIFoundation   这个不是啊

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore  查了很多是这个。

这是hopper出来的

void * -[UINavigationController popToRootViewControllerAnimated:](void * self, void * _cmd, bool arg2) {

    rax = [self popToRootViewControllerWithTransition:arg2 + arg2];

    return rax;

}

void * -[UINavigationController popToRootViewControllerWithTransition:](void * self, void * _cmd, int arg2) {
    r14 = arg2;
    r15 = self;
    r12 = [[self mutableChildViewControllers] retain];
    if ([r12 count] >= 0x2) {
            r13 = [[r12 objectAtIndex:0x0] retain];
            rbx = [[r15 popToViewController:r13 transition:r14] retain];
            [r13 release];
    }
    else {
            rbx = 0x0;
    }
    [r12 release];
    rax = [rbx autorelease];
    return rax;
}

上面代码说[self mutableChildViewControllers] < 2是nil 但打印完不是

那就是pop到第一个vc

void * -[UINavigationController popToViewController:transition:](void * self, void * _cmd, void * arg2, int arg3) {
    var_34 = arg3;
    r15 = self;
    rax = [arg2 retain];
    var_80 = __NSConcreteStackBlock;
    *(&var_80 + 0x8) = 0xc2000000;
    rcx = ___57-[UINavigationController popToViewController:transition:]_block_invoke;
    *(&var_80 + 0x10) = rcx;
    var_30 = rax;
    *(&var_80 + 0x18) = ___block_descriptor_tmp.2146;
    *(&var_80 + 0x20) = r15;
    var_50 = _cmd;
    *(&var_80 + 0x28) = _cmd;
    var_40 = objc_retainBlock(&var_80);
    r13 = [[r15 _transitionCoordinator] retain];
    r12 = [[r15 _existingView] retain];
    rbx = [[r12 window] retain];
    [rbx release];
    [r12 release];
    var_48 = r13;
    if ((r13 != 0x0) || (rbx == 0x0)) goto loc_2c23e1;

loc_2c23b1:
    if ([r15 _isTransitioning] == 0x0) goto loc_2c2489;

loc_2c23c9:
    rbx = var_34;
    r12 = var_30;
    r13 = var_40;
    if (rbx != 0x0) goto loc_2c24b4;

loc_2c25c5:
    rsi = r12;
    rdx = rbx;
    r15 = [(*(r13 + 0x10))(r13, rsi, rdx) retain];
    goto loc_2c268c;

loc_2c268c:
    [var_48 release];
    [r13 release];
    [r12 release];
    rax = [r15 autorelease];
    return rax;

loc_2c24b4:
    rcx = __NSConcreteStackBlock;
    var_130 = rcx;
    var_30 = *_UIApp;
    *(&var_130 + 0x8) = 0xc2000000;
    *(&var_130 + 0x10) = ___57-[UINavigationController popToViewController:transition:]_block_invoke.2155;
    *(&var_130 + 0x18) = ___block_descriptor_tmp.2158;
    *(&var_130 + 0x20) = r15;
    *(&var_130 + 0x28) = [r12 retain];
    *(&var_130 + 0x30) = [r13 retain];
    *(int32_t *)(&var_130 + 0x38) = rbx;
    rsi = @selector(_performBlockAfterCATransactionCommits:);
    rdx = &var_130;
    _objc_msgSend(var_30, rsi);
    [*(&var_130 + 0x30) release];
    rdi = *(&var_130 + 0x28);
    goto loc_2c2687;

loc_2c2687:
    [rdi release];
    r15 = 0x0;
    goto loc_2c268c;

loc_2c2489:
    rax = [r15 needsDeferredTransition];
    rbx = var_34;
    r12 = var_30;
    r13 = var_40;
    if ((rbx == 0x0) || (rax == 0x0)) goto loc_2c25c5;
    goto loc_2c24b4;

loc_2c23e1:
    if ([r15 _transitionConflictsWithNavigationTransitions:var_48] == 0x0) goto loc_2c253f;

loc_2c23fd:
    r14 = [NSStringFromSelector(var_50) retain];
    rbx = [NSStringFromClass([r15 class]) retain];
    rdx = rbx;
    rcx = r15;
    NSLog(@"%@ called on <%@ %p> while an existing transition or presentation is occurring; the navigation stack will not be updated.", r14, rdx, rcx);
    [rbx release];
    [r14 release];
    rsi = @selector(array);
    r15 = [_objc_msgSend(@class(NSArray), rsi) retain];
    r12 = var_30;
    r13 = var_40;
    goto loc_2c268c;

loc_2c253f:
    COND = rbx == 0x0;
    rbx = var_34;
    if (COND) goto loc_2c2603;

loc_2c254b:
    if (rbx == 0x0) goto loc_2c25e8;

loc_2c2553:
    var_B8 = __NSConcreteStackBlock;
    *(&var_B8 + 0x8) = 0xc2000000;
    *(&var_B8 + 0x10) = ___57-[UINavigationController popToViewController:transition:]_block_invoke.2151;
    *(&var_B8 + 0x18) = ___block_descriptor_tmp.2154;
    *(&var_B8 + 0x20) = r15;
    r12 = var_30;
    *(&var_B8 + 0x28) = [r12 retain];
    *(int32_t *)(&var_B8 + 0x30) = rbx;
    rsi = @selector(animateAlongsideTransition:completion:);
    r15 = 0x0;
    rdx = 0x0;
    rcx = &var_B8;
    _objc_msgSend(var_48, rsi);
    [*(&var_B8 + 0x28) release];
    r13 = var_40;
    goto loc_2c268c;

loc_2c25e8:
    if ([var_48 presentationStyle] == 0xffffffffffffffff) goto loc_2c2553;

loc_2c2603:
    var_F0 = __NSConcreteStackBlock;
    *(&var_F0 + 0x8) = 0xc2000000;
    *(&var_F0 + 0x10) = ___57-[UINavigationController popToViewController:transition:]_block_invoke.2147;
    *(&var_F0 + 0x18) = ___block_descriptor_tmp.2150;
    r13 = var_40;
    rax = [r13 retain];
    rcx = _objc_retain;
    *(&var_F0 + 0x20) = rax;
    r12 = var_30;
    *(&var_F0 + 0x28) = [r12 retain];
    *(int32_t *)(&var_F0 + 0x30) = rbx;
    rsi = @selector(_performWithoutDeferringTransitions:);
    rdx = &var_F0;
    _objc_msgSend(@class(UIViewController), rsi);
    [*(&var_F0 + 0x28) release];
    rdi = *(&var_F0 + 0x20);
    goto loc_2c2687;
}
int ___57-[UINavigationController popToViewController:transition:]_block_invoke(int arg0, int arg1, int arg2) {
    r15 = arg2;
    r12 = arg0;
    r14 = [arg1 retain];
    r13 = [[*(r12 + 0x20) mutableChildViewControllers] retain];
    rbx = [[*(r12 + 0x20) topViewController] retain];
    [rbx release];
    if (rbx == r14) goto loc_2c2878;

loc_2c2734:
    var_CC = r15;
    rbx = [r13 indexOfObjectIdenticalTo:r14];
    if (rbx == 0x7fffffffffffffff) {
            rax = [NSString stringWithUTF8String:"/BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKitCore_Sim/UIKit-3698.93.8/UINavigationController.m"];
            rax = [rax retain];
            var_B8 = r13;
            r13 = rax;
            rdi = @"<Unknown File>";
            if (r13 != 0x0) {
                    rdi = r13;
            }
            rax = [rdi retain];
            [r13 release];
            r13 = [[NSAssertionHandler currentHandler] retain];
            [r13 handleFailureInMethod:*(r12 + 0x28) object:*(r12 + 0x20) file:rax lineNumber:0x1ff0 description:@"Tried to pop to a view controller that doesn't exist."];
            r14 = r14;
            [rax release];
            rdi = r13;
            r13 = var_B8;
            [rdi release];
    }
    rax = [r13 count];
    var_D8 = rbx + 0x1;
    r15 = rax - rbx + 0x1;
    if (rax - rbx + 0x1 == 0x1) goto loc_2c295a;

loc_2c2792:
    if (*(int32_t *)__UIApplicationLinkedOnVersion == 0x0) goto loc_2c2948;

loc_2c27a3:
    if (*(int32_t *)__UIApplicationLinkedOnVersion <= 0x7ffff) goto loc_2c295a;

loc_2c27ae:
    var_C8 = r12;
    var_C0 = r14;
    r14 = [r13 indexOfObjectIdenticalTo:r14];
    if (r14 == 0x7fffffffffffffff) {
            rbx = [[NSString stringWithUTF8String:"/BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKitCore_Sim/UIKit-3698.93.8/UINavigationController.m"] retain];
            rdi = @"<Unknown File>";
            if (rbx != 0x0) {
                    rdi = rbx;
            }
            r12 = [rdi retain];
            [rbx release];
            rbx = [[NSAssertionHandler currentHandler] retain];
            [rbx handleFailureInMethod:*(var_C8 + 0x28) object:*(var_C8 + 0x20) file:r12 lineNumber:0x2012 description:@"Tried to pop to a view controller that doesn't exist."];
            [r12 release];
            [rbx release];
            r13 = r13;
    }
    r12 = [[r13 subarrayWithRange:r14 + 0x1] retain];
    rcx = r14 + 0x1;
    r14 = [[r13 subarrayWithRange:0x0] retain];
    r13 = r13;
    [*(var_C8 + 0x20) _setViewControllers:r14 transition:rcx animated:var_CC != 0x0 ? 0x1 : 0x0 operation:0x2];
    [r14 release];
    r14 = var_C0;
    goto loc_2c2bcb;

loc_2c2bcb:
    [r13 release];
    [r14 release];
    if (*___stack_chk_guard == *___stack_chk_guard) {
            rax = [r12 autorelease];
    }
    else {
            rax = __stack_chk_fail();
    }
    return rax;

loc_2c295a:
    var_E0 = [[[NSMutableArray alloc] init] autorelease];
    r15 = r15 - 0x1;
    if (r15 != 0x0) {
            var_C8 = r12;
            var_C0 = r14;
            var_B8 = r13;
            var_E8 = r15;
            rax = [r13 subarrayWithRange:var_D8];
            rax = [rax retain];
            *(int128_t *)(&var_130 + 0x30) = intrinsic_movaps(*(int128_t *)(&var_130 + 0x30), 0x0);
            *(int128_t *)(&var_130 + 0x20) = intrinsic_movaps(*(int128_t *)(&var_130 + 0x20), 0x0);
            *(int128_t *)(&var_130 + 0x10) = intrinsic_movaps(*(int128_t *)(&var_130 + 0x10), 0x0);
            r15 = rax;
            var_130 = intrinsic_movaps(var_130, 0x0);
            r14 = [r15 countByEnumeratingWithState:&var_130 objects:&var_B0 count:0x10];
            if (r14 != 0x0) {
                    rbx = **(&var_130 + 0x10);
                    do {
                            r12 = 0x0;
                            do {
                                    if (*var_120 != rbx) {
                                            objc_enumerationMutation(r15);
                                    }
                                    [*(var_128 + r12 * 0x8) removeFromParentViewController];
                                    r12 = r12 + 0x1;
                            } while (r12 < r14);
                            r14 = [r15 countByEnumeratingWithState:&var_130 objects:&var_B0 count:0x10];
                    } while (r14 != 0x0);
            }
            [var_E0 addObjectsFromArray:r15];
            r12 = var_C8;
            if ([*(r12 + 0x20) isNavigationBarHidden] == 0x0) {
                    rbx = [[*(*(r12 + 0x20) + *ivar_offset(_navigationBar)) items] retain];
                    r14 = [rbx mutableCopy];
                    [rbx release];
                    [r14 removeObjectsInRange:var_D8];
                    [*(*(var_C8 + 0x20) + *ivar_offset(_navigationBar)) _setItems:r14 transition:0x0];
                    [r14 release];
                    r12 = var_C8;
            }
            [r15 release];
            r14 = var_C0;
            r13 = var_B8;
    }
    r15 = [[*(r12 + 0x20) popViewControllerWithTransition:var_CC] retain];
    if (r15 == 0x0) {
            rbx = [[NSString stringWithUTF8String:"/BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKitCore_Sim/UIKit-3698.93.8/UINavigationController.m"] retain];
            rdi = @"<Unknown File>";
            if (rbx != 0x0) {
                    rdi = rbx;
            }
            rax = [rdi retain];
            [rbx release];
            rbx = [[NSAssertionHandler currentHandler] retain];
            [rbx handleFailureInMethod:*(r12 + 0x28) object:*(r12 + 0x20) file:rax lineNumber:0x200c description:@"Failed to get popped view controller."];
            r14 = r14;
            [rax release];
            [rbx release];
            r13 = r13;
    }
    rbx = var_E0;
    [rbx addObject:r15];
    [r15 release];
    goto loc_2c2bbf;

loc_2c2bbf:
    r12 = [rbx retain];
    goto loc_2c2bcb;

loc_2c2948:
    if (__UIApplicationLinkedOnOrAfter(0x80000) != 0x0) goto loc_2c27ae;
    goto loc_2c295a;

loc_2c2878:
    rbx = 0x0;
    goto loc_2c2bbf;
}
void -[UINavigationController _setViewControllers:transition:animated:operation:](void * self, void * _cmd, void * arg2, int arg3, bool arg4, long long arg5) {
    var_-56 = arg3;
    var_-88 = _cmd;
    rbx = [arg2 retain];
    var_-96 = arg5;
    var_-68 = arg4;
    var_-80 = self;
    if (*(int32_t *)__UIApplicationLinkedOnVersion != 0x0) {
            var_-49 = *(int32_t *)__UIApplicationLinkedOnVersion > 0x6ffff ? 0x1 : 0x0;
    }
    else {
            var_-49 = __UIApplicationLinkedOnOrAfter(0x70000);
    }
    rdx = rbx;
    r13 = [[NSSet setWithArray:rdx] retain];
    r14 = [r13 count];
    var_-64 = rbx;
    r12 = [rbx count];
    [r13 release];
    if (var_-49 != 0x0) {
            r13 = var_-80;
            if (r14 != r12) {
                    rbx = [[NSString stringWithUTF8String:"/BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKitCore_Sim/UIKit-3698.93.8/UINavigationController.m"] retain];
                    rdi = @"<Unknown File>";
                    if (rbx != 0x0) {
                            rdi = rbx;
                    }
                    rdx = "/BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKitCore_Sim/UIKit-3698.93.8/UINavigationController.m";
                    r15 = [rdi retain];
                    [rbx release];
                    rbx = [[NSAssertionHandler currentHandler] retain];
                    [rbx handleFailureInMethod:var_-88 object:r13 file:r15 lineNumber:0x43f description:stack[2048]];
                    [r15 release];
                    [rbx release];
            }
    }
    else {
            r13 = var_-80;
            if (r14 != r12) {
                    r15 = *(___UILogGetCategoryCachedImpl("Assert", __setViewControllers:transition:animated:operation:.__s_category) + 0x8);
                    if (os_log_type_enabled(r15, 0x10) != 0x0) {
                            *(int32_t *)(rsp + 0xfffffffffffffff0) = 0x8400102;
                            *(rsp + 0xfffffffffffffff4) = var_-64;
                            rbx = [r15 retain];
                            _os_log_impl(0xffffffffffd5e5a0, rbx, 0x10, "All view controllers in a navigation controller must be distinct (%@)", rsp + 0xfffffffffffffff0, 0xc);
                            [rbx release];
                    }
            }
    }
    var_-144 = __NSConcreteStackBlock;
    *(&var_-144 + 0x8) = 0xc2000000;
    *(&var_-144 + 0x10) = ___76-[UINavigationController _setViewControllers:transition:animated:operation:]_block_invoke;
    *(&var_-144 + 0x18) = ___block_descriptor_tmp.492;
    *(&var_-144 + 0x20) = r13;
    *(&var_-144 + 0x28) = var_-88;
    rbx = var_-64;
    [rbx enumerateObjectsUsingBlock:rdx];
    r15 = var_-96;
    r12 = var_-68;
    if (var_-56 == 0x0) {
            if (*(int32_t *)__UIApplicationLinkedOnVersion != 0x0) {
                    rcx = 0x0;
                    if (*(int32_t *)__UIApplicationLinkedOnVersion >= 0x70000) {
                            r14 = [[r13 mutableChildViewControllers] retain];
                            var_-56 = [r13 _transitionForOldViewControllers:r14 newViewControllers:rbx];
                            [r14 release];
                            rcx = var_-56;
                    }
            }
            else {
                    rax = __UIApplicationLinkedOnOrAfter(0x70000);
                    rcx = 0x0;
                    if (rax != 0x0) {
                            r14 = [[r13 mutableChildViewControllers] retain];
                            var_-56 = [r13 _transitionForOldViewControllers:r14 newViewControllers:rbx];
                            [r14 release];
                            rcx = var_-56;
                    }
            }
    }
    [r13 _setViewControllers_7_0:rbx transition:rcx animated:r12 & 0xff operation:r15];
    [rbx release];
    if (*___stack_chk_guard != *___stack_chk_guard) {
            __stack_chk_fail();
    }
    return;
}
发布了120 篇原创文章 · 获赞 15 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/qq_15509071/article/details/104507417
今日推荐