避免在 Cocoa class 中出现未使用的 C 回调函数警告

Avoid unused C callback function warning in Cocoa class

在我的 class 头文件中,在 @interface 部分,我有:

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

然后在我的 class .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];
}

我在静态 C 函数的 .h 文件中收到未使用的函数警告。我怎样才能避免这种情况,因为该函数不是我调用的,而是提供给 OS 供其调用的?

static 关键字表示该函数是本地函数,并且是特定翻译单元(即 .M 文件)的私有函数,因此它不会被导出并可供其他 .M 文件使用。因此,您应该 而不是 在您的 .H 文件中声明它。

我的猜测是,在包含 .H 文件的任何其他 .M 文件中,声明是 声明 本地 static(私有)名为 ReachabilityCallback 的函数。但是,由于该函数仅在一个文件中 定义 ,因此编译器(正确地)向您发出警告,提示每个额外的 .M 文件都有未使用的静态函数声明,其中 header包括在内。

您应该将初始声明移动到实际实现的 .M 文件的顶部。