簡體   English   中英

第三方iOS庫中的私有方法

[英]private method in 3rd party iOS library

我想為iPhone使用彈出視圖。 我發現了一個第三方圖書館,作者說它的某些方法是利用私有方法(這會在提交到應用商店時引起問題)
但是我看不出他的代碼在哪里使用私有方法。
你能發現他們嗎?

[barButtonItem performSelector:@selector(view)]被認為是在調用私有方法?

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];
}

視圖不是UIBarButtonItem的公共屬性。 參考應用程序正在使用它。

要驗證任何此類功能,最好使用點運算符或使用其吸氣劑(相同)來調用其屬性。

檢查以下代碼,表明它是私有的:

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

它正在使用performSelector訪問視圖,並且XCode不夠聰明,無法發出任何警告,同時以這種方式使用私有屬性。

根據我的經驗,當您上傳圖像時,Apple會對您的二進制文件執行一些自動檢查。 那么,為什么不嘗試上傳卻看看他們是否抱怨呢? 我被一個包含的庫使用了自己的類中的一種方法,該方法與Apple類中的一些私有方法同名,而我的應用卻因此而未能通過(因為我只是重命名了該方法,因為我有來源。)

您不應該訪問UIBarButtonItemview屬性。 那是私人電話的地方:

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

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

請參閱UIBarButtonItem的官方文檔 ,它沒有公共view屬性。

但是,它並不是真正的私有調用,因為view方法完全合法,並且不會觸發警報(例如,如果您使用的方法名稱僅由私有調用使用),因此Apple不會注意到它。 但是我只說不應不會

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM