警告:传递参数3“objc_setProperty”由于原型签署(warning: passing

2019-10-28 10:43发布

编译器抱怨这个,我激活的所有类型的警告后:

我有一个应用程序委托是这样的:

#import <UIKit/UIKit.h>

@class MyViewController;

@interface TestAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    MyViewController *myViewController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet MyViewController *myViewController;

@end

在实现文件中,我有合成的代码:

@synthesize window;
@synthesize rootViewController;

在实现文件的末尾,编译器会抱怨:

At top level:
warning: passing argument 3 of 'objc_setProperty' as signed due to prototype
warning: passing argument 5 of 'objc_setProperty' with different width due to prototype
warning: passing argument 6 of 'objc_setProperty' with different width due to prototype
warning: passing argument 3 of 'objc_setProperty' as signed due to prototype
warning: passing argument 5 of 'objc_setProperty' with different width due to prototype
warning: passing argument 6 of 'objc_setProperty' with different width due to prototype

这意味着什么? 我必须担心吗?

Answer 1:

是的 - 这是不对的。 一点也不。 你应该担心。

当你在顶层这样的警告,它通常意味着有东西在稍后引起问题的头文件搞砸了。

所以,问题是,是什么? 可能是某处的#define。 可能是一些先前声明,特别是在试图解决这个问题将由#importing提供报头正确的系统来适当地固定一个错误的东西声明。

补充一下,喷出这些警告(你可以找到它在Xcode)全编译命令行。



Answer 2:

我敢肯定,你需要在这个文件中的错误与苹果。 我相信(在看到此警告)objc_setProperty(私有函数,AFAICT)在苹果的实施@synthesize二传手代码生成的使用。 所以......这个隐藏的实现需要时警告标志被允许(改变这样的警告,不会产生GCC_WARN_PROTOTYPE_CONVERSION )。 这些(及其他)条件应该已经验证了一个更大的代码库(考虑C ++以及),启用更多的警告。



文章来源: warning: passing argument 3 of 'objc_setProperty' as signed due to prototype