从项目的视图控制器中删除所有-viewDidUnload的方法

时间:2013-09-28 02:19:54

标签: ios regex vim batch-processing viewdidunload

正如Apple的官方文件所说:

  iOS 6.0中不推荐使用

-viewDidUnload 。在低内存条件下不再清除视图,因此永远不会调用此方法。

同时,最好从部署目标为iOS 6.0或更高版本的项目中删除所有-viewDidUnload实现。但是逐个删除它很无聊,特别是你有数百个控制器和放大器。几个项目。

那么,有没有可以执行此批处理作业的脚本或命令?

1 个答案:

答案 0 :(得分:2)

我为Vim找到了一个命令,我相信它会让你的生活更轻松。 ;)

在所需的根目录中打开Vim(通常,它将是所有控制器文件的根目录),按 Shift 进入命令行模式,运行以下命令:

:args **/*.m | argdo %s/^-\ (void)viewDidUnload\_.\{-}}\n^$\n//ge | update

这将取代所有

- (void)viewDidUnload
{
  [super viewDidUnload];
  ...
}
// a blank line here

要清空,换句话说,-viewDidUnload代码段将被删除。 但请注意,工具后面有一个空行。如果您不想包含它,请使用

:args **/*.m | argdo %s/^-\ (void)viewDidUnload\_.\{-}}//ge | update

代替。

注意:当您在项目的根目录中时,这将包括lib文件。我建议你去你的控制器的根目录,然后是所有文件&你会对结果感到满意。 ;)


提示:

之后,您最好检查是否已删除所有-viewDidUnload,在所需根目录的终端上运行以下命令:

$ find . -type f -iname "*.m" -exec grep -i "viewDidUnload" {} +

应该没有输出结果。否则,某些目标会丢失,您可以轻松找到它,因为它会列出所有未正确管理的文件,然后手动将其删除(如果您的- (void)viewDidLoad -(void)viewDidLoad没有空格,可能会发生这种情况,或者别的东西)。

最后,你可以运行

$ git diff -b --color-words

查看结果。好好享受! ;)


进一步阅读命令

  • args **/*.m:将arglist设置为包含当前目录及其子目录中的所有.m文件;
  • argdo:对arglist;
  • 中的所有参数运行以下命令
  • %s/^-\ (void)viewDidUnload\_.\{-}}\n^$\n//ge:Vim RegEx将-viewDidUnload实现代码段替换为空;
    • \_.:查找任何字符,包括行尾(换行符)。
    • \{-}:尽可能少匹配(在第一个}停止,例如\{-}h将在第一个h停止;
    • }:要匹配的最后一项;
    • \n:换行符;
    • ^$\n:空行。
  • update:仅在缓冲区已被修改时保存修改。

参考

相关问题