gpt4 book ai didi

objective-c - 是否可以在 Objective-C 中创建自定义指令?

转载 作者:太空狗 更新时间:2023-10-30 03:36:32 25 4
gpt4 key购买 nike

Objective-C 的指令如下:

  • @接口(interface)
  • @实现
  • @结束
  • @协议(protocol)
  • @属性(property)
  • @synthesize

我认为这些东西就像复杂的宏或代码生成器。是否可以为代码生成目的创建自定义指令?一种可能的用途是为 CoreData 生成方法。

我认为不是,因为我从未见过任何关于它的东西,但我的世界不是这个世界。


后续问题:

Jonathan 在下面提到可以编写自己的预处理器,这就引出了如何编写的问题。目前,#define SYMBOLIC_CONSTANT 102 将在文件移至编译器之前用文件中的字符 102 替换字符 SYMBOLIC_CONSTANT 的所有实例。

我知道 XCode 可以将“运行脚本阶段”添加到目标构建过程。所以我可以编写一个脚本来查找我的自定义预处理指令,如“$coredata”,然后让脚本生成一个新文件,其中的字符 $coredata 替换为一些代码字符。但是根据我对 XCode 构建过程的了解,您不能将更改后的文件提供给编译器源代码阶段。这些文件由 IDE 指定和锁定。

有人做过类似的事情吗?我知道使用外部构建系统是可能的,但老实说我还没有达到那种理解水平。我不知道“构建并运行”按钮功能的技术细节。

与此同时,我将开始阅读 Apple 的 XCode 文档...

感谢您的回复!

最佳答案

虽然接受的答案是正确的,但对于此类问题有部分 hacky 解决方案,libextobjc图书馆采用。考虑 this code ,你会在那里找到如下定义:

#define weakify(...) \
try {} @finally {} \
metamacro_foreach_cxt(ext_weakify_,, __weak, __VA_ARGS__)

这样的定义允许以下列形式使用weakify关键字:

id foo = [[NSObject alloc] init];
id bar = [[NSObject alloc] init];

@weakify(foo, bar);

图书馆作者解释here :

Since the macros are intended to be used with an @ preceding them (like @strongify(self);), the try {} soaks up the symbol so it doesn't cause syntax errors.


稍后更新

From now on libextobjc 使用 @autoreleasepool 来“吸收符号”。

关于objective-c - 是否可以在 Objective-C 中创建自定义指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4975464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com