2017-01-02 32 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文件的顶部。

相关问题