gpt4 book ai didi

iphone - 第三方 iOS 库中的私有(private)方法

转载 作者:行者123 更新时间:2023-11-29 04:27:38 25 4
gpt4 key购买 nike

我想在 iPhone 上使用弹出 View 。我找到了一个第三方库,作者说它的一些方法正在使用私有(private)方法。(这在提交到应用商店时会导致问题)
但我没有看到他的代码中在哪里使用了私有(private)方法。
你能发现它们吗?

[barButtonItem PerformSelector:@selector(view)] 被认为是调用私有(private)方法?

https://github.com/sonsongithub/PopupView/blob/master/SNPopupView%2BUsingPrivateMethod.m

- (void)showFromBarButtonItem:(UIBarButtonItem*)barButtonItem inView:(UIView*)inView animated:(BOOL)animated {

if(![barButtonItem respondsToSelector:@selector(view)]) {
// error
return;
}

UIView *targetView = (UIView *)[barButtonItem performSelector:@selector(view)];
UIView *targetSuperview = [targetView superview];

BOOL isOnNavigationBar = YES;

if ([targetSuperview isKindOfClass:[UINavigationBar class]]) {
isOnNavigationBar = YES;
}
else if ([targetSuperview isKindOfClass:[UIToolbar class]]) {
isOnNavigationBar = NO;
}
else {
// error
return;
}

CGRect rect = [targetSuperview convertRect:targetView.frame toView:inView];

CGPoint p;
p.x = rect.origin.x + (int)rect.size.width/2;

if (isOnNavigationBar)
p.y = rect.origin.y + rect.size.height + BAR_BUTTON_ITEM_UPPER_MARGIN;
else
p.y = rect.origin.y - BAR_BUTTON_ITEM_BOTTOM_MARGIN;

[self showAtPoint:p inView:inView animated:animated];
}

最佳答案

view 不是 UIBarButtonItem 的公共(public)属性。引用应用程序正在使用它。

要验证任何此类功能,最好使用点运算符或使用其 getter 来调用其属性(这是同一件事)。

检查此代码,这表明它是私有(private)的:

UIView *targetView = (UIView *)[barButtonItem performSelector:@selector(view)];

它正在使用 PerformSelector 访问 View ,而 XCode 不够智能,无法在以这些方式使用私有(private)属性时发出任何警告。

关于iphone - 第三方 iOS 库中的私有(private)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12111681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com