警告を強制的に削除する

#pragmaclang診断プッシュ

#pragma clangdiagnostic「-Wundeclared-selector」を無視しました

    UIPanGestureRecognizer * pan = [[ UIPanGestureRecognizeralloc ] initWithTarget self InteractivePopGestureRecognizer 委任アクション@selector (handleNavigationTransition :)];

#pragma clang Diagnostics pop


「-Wundeclared-selector」は特定の警告タイプであり、状況に応じて交換してください

特定の警告タイプを表示するには、警告を選択して、[ログに表示]を右クリックします。 



以下は、転載された部分です。念のため、転載された住所です。

http://www.cocoachina.com/ios/20141218/10678.html

私たちのプロジェクトでは、通常、多くのサードパーティコードを使用します。これらのコードは非常に複雑な場合があります。あえて変更しませんが、作成者は更新を停止しました。SDKがアップグレードされるか、コンパイラがアップグレードされると、これらの残りのコードが変更。警告が非常に多いので、これらの迷惑な警告を取り除く方法はありますか。そうしないと、プロジェクトに何百もの警告がある場合、それを見ると満足できなくなります。警告を削除するにはどうすればよいですか?

1.最も直接的で、かつてないほど安全な方法は、警告コードを直接見つけて、警告なしに変更することです。この方法が最も安全です。

しかし、問題があります。つまり、多くのファイルにこの種の警告がある場合、多くのソースコードを変更する必要があります。私たちが作成していないソースコードについては、いつでも更新される可能性があります。これは私たちのやり方です、明らかに望ましくありません。

2.コンパイラが提供するマクロを使用して操作します。この方法は、私たちのプロジェクトでよく見られます。

#pragma clang 
Diagnostics push #pragma clang Diagnostics ignore "-Wdeprecated-declarations" 
    //この途中で記述されたコードは、コンパイラによってプロンプトが表示されません-Wdeprecated-declarations type warning 
dispatch_queue_tcurrentQueue = dispatch_get_current_queue(); 
#pragma clang Diagnostics pop

この方法の問題は最初の問題と似ています。ソースコードの実装を変更する必要もあります。サードパーティの場合、特に頻繁に更新される一部のサードパーティの場合は、絶対に変更したくありません。一般的な警告作成者の直後に表示されます更新されました。ここでこのような操作を行うのは無駄に思えます。また、arm64サポートを追加すると、ある種の警告が一度に何百も表示され、変更するのに非常に時間と手間がかかります。

たとえば、このプロジェクトでは、arm64を開いてから、次のコマンドをコンパイルします。

20141217174437072.png

3.指定されたファイルに対して指定されたタイプの警告をオフにします

ここでは、特定のプロジェクトを取り上げましょう。たとえば、プロジェクトにPresencePacketファイルがあります。

20141217174425796.png

実際、特定のファイルにARCサポートを追加したとき、または特定のファイルにサポートされていないときに特定の種類の警告を無視/表示するように追加したのと同じように、特定のファイルに対して特定の種類の警告をオフにするのは非常に簡単です。

20141217174449895.png

双击 文件, 在其中添加  -Wno-shorten-64-to-32  (这个关键在就是让编译器忽略 Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int32_t' (aka 'int') 警告)

20141217174455652.png

添加完成后,再编译,那么PresencePacket文件中的  Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int32_t' (aka 'int’) 警告就没有了,是不是很简单,很方便.

这种方式,已经是大大的减少了工作量了,只需要在指定的文件的编译中添加 -Wno-shorten-64-to-32就可以了.那么有没有什么方式可以让编译器忽略整个工程中的 指定类型的警告呢?

4.关闭工程中指定 类型的警告

这个最简单了, 工程的target有一个 Other Warning Flags 

20141217174500987.png

在其中添加 -Wno-shorten-64-to-32

20141217174505979.png

再重新编译,哈哈,整个文件中的  Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int32_t' (aka 'int’) 警告全部消失了!!!!

5.大家可能很疑惑,上面的-Wno-shorten-64-to-32 是怎么来的,我怎么知道   Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int32_t' (aka 'int’) 警告 就是 -Wno-shorten-64-to-32类型呢?这里,其实不需要记忆的,当工程中有这种类型警告的时候

在警告窗口,某个警告上,我们右击,显示出右键菜单,选择其中的 Reveal in Log

20141217174511111.png

则会显示 

20141217174458671.png

注意到其中 [-Wshorten-64-to-32],在这个括号中的就是 这种警告的类型   -W是前缀,这个前缀表示的是 打开这种类型的警告 如果我们是要关闭某种类型的警告的话, 要将 -W换成 -Wno-  

这样就得到了  -Wno-shorten-64-to-32了.

后记:

对于我们使用cocoapod引入的第三方,我们可以在podfile文件中 增加一句  inhibit_all_warnings! 来要pod的工程不显示任何警告,例如

link_with'SecondHouseBrokerAPP '、' SecondHouseBrokerCOM '
プラットフォーム:ios、' 
6.0'inhibito_all_warnings!


ポッド「CocoaAsyncSocket」
ポッド「到達可能」
ポッド「ProtobufObjC」
ポッド「SDWebImage」
ポッド「FMDB」
ポッド「GPUImage」
ポッド「CXPhotoBrowser」
ポッド「CocoaLumberjack」

また、上記の方法は他の種類の警告にも適しています!!!


おすすめ

転載: blog.csdn.net/u010670117/article/details/48240715