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

时间:2017-01-02 16:22:04

标签: objective-c cocoa callback warnings

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

我在.h文件中获取了一个未使用的函数警告,用于静态C函数。我怎么能避免这种情况,因为我没有调用该函数,而是提供给操作系统调用它?

1 个答案:

答案 0 :(得分:2)

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

我的猜测是,正在发生的事情是,在包含.H文件的任何其他.M文件中,声明声明一个名为{{1的本地static(私有)函数}}。但是,由于函数只在一个文件中定义,编译器(正确)会为每个额外的.M文件提供一个未使用的静态函数声明的警告,其中包含标题。

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