2017-01-02 92 views
0

在我的類的頭文件,在@interface部分中,我有:避免出現未使用ç回調函數警告

static void ReachabilityCallback (SCNetworkReachabilityRef target, SCNetworkReachabilityFlags flags, void* info); 

然後在我的課.m文件,我設置爲回調

if (SCNetworkReachabilitySetCallback([self reachability], ReachabilityCallback, &context)) 
    SCNetworkReachabilityScheduleWithRunLoop([self reachability], CFRunLoopGetCurrent(), kCFRunLoopDefaultMode); 

而且回調本身也是在.M定義(在@implementation內)

static void ReachabilityCallback (SCNetworkReachabilityRef target, SCNetworkReachabilityFlags flags, void* info) 
{ 
    BOOL isReachable = ((flags & kSCNetworkFlagsReachable) != 0); 
    BOOL connectionRequired = ((flags & kSCNetworkFlagsConnectionRequired) != 0); 
    BOOL networkAvailable = (isReachable && !connectionRequired) ? YES : NO; 

    // Post a notification to notify the client that the network reachability changed. 
    NSDictionary* userInfo = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:networkAvailable], kReachabilityKey, nil]; 
    [[NSNotificationCenter defaultCenter] postNotificationName:kReachabilityChangedNotification object:nil userInfo:userInfo]; 
} 

我得到一個未使用的˚F我的.h文件中的靜態C函數的聯合警告。我該如何避免這種情況,因爲該函數不是由我調用的,而是提供給OS調用的?

+0

我將標記從C更改爲Objective-C,您可能會從該列表中獲得更好的答案。 –

+0

謝謝。你的回答足夠了......問題解決了。 – Trygve

回答

2

static關鍵字指示該函數對於特定翻譯單元(即.M文件)是本地和專用的,因此它不會被導出並使其對其他.M文件可用。因此,您應該將而不是聲明在您的.H文件中。

我的猜測是,發生的事情是,在包括.h文件中任何其他.m文件,該聲明是聲明本地static(私人)命名ReachabilityCallback功能。但是,由於函數僅在一個文件中定義了,因此編譯器(正確)會爲包含標題的每個額外.M文件的未使用靜態函數聲明提供警告。

您應該將初始聲明移至實際實現的.M文件的頂部。