避免 Cocoa 类中未使用的 C 回调函数警告

Avoid unused C callback function warning in Cocoa class

提问人:Trygve 提问时间:1/3/2017 最后编辑:Chris VigTrygve 更新时间:1/3/2017 访问量:212

问:

在我的类头文件中,在@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];
}

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

Objective-C Cocoa 回调 警告

评论

0赞 Chris Vig 1/3/2017
我把你的标签从C改成了Objective-C,你可能会从这个列表中得到更好的答案。
0赞 Trygve 1/4/2017
谢谢。你的回答就足够了......问题解决了。

答:

2赞 Chris Vig 1/3/2017 #1

该关键字表示该函数是本地函数,并且是特定翻译单元(即 .M 文件),因此它不会被导出并提供给其他 .M 文件。因此,您不应在 .H 文件。static

我的猜测是,正在发生的事情是,在任何其他.M 文件,其中包含 .H 文件,则声明声明了一个名为 的本地(私有)函数。但是,由于该函数仅在一个文件中定义,因此编译器(正确地)会针对每个额外的 .包含标头的 M 文件。staticReachabilityCallback

您只需将初始声明移动到 .M 文件。