在我的类头文件中,在@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函数。我怎么能避免这种情况,因为我没有调用该函数,而是提供给操作系统调用它?
答案 0 :(得分:2)
static
关键字表示该函数是特定转换单元(即.M文件)的本地和私有函数,因此它不会被导出并可供其他.M文件使用。因此,您应该不在.H文件中声明它。
我的猜测是,正在发生的事情是,在包含.H文件的任何其他.M文件中,声明声明一个名为{{1的本地static
(私有)函数}}。但是,由于函数只在一个文件中定义,编译器(正确)会为每个额外的.M文件提供一个未使用的静态函数声明的警告,其中包含标题。
您应该将初始声明移动到实际实现的.M文件的顶部。