You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Objective-C文档中@weakify/strongify发布后异常高亮问题求助

解决Objective-C代码中@weakify/@strongify异常高亮问题

问题描述

用Github Markdown编写Objective-C相关文档时,使用```objc标记的代码块里,@weakify(self)和@strongify(self)在文档网站发布后会显示为红底白字的异常高亮状态,但在Github预览中完全正常。尝试改用objective-c标记时,代码仅显示为纯灰色,没有正常的语法高亮效果。

代码示例:

@weakify(self);
[self.bannerAdUnit fetchDemandWithAdObject:gamRequest completion:^(enum ResultCode resultCode) { 
  @strongify(self);
}];

核心原因

文档网站使用的语法高亮引擎(比如Prism、Highlight.js)对Objective-C的第三方自定义宏(@weakify/@strongify属于ReactiveCocoa的常用宏)支持不足,误将其识别为错误语法;而Github使用的linguist高亮引擎对这类常见第三方宏有更好的兼容性。

可行解决方法

  • 换用更兼容的代码标记
    尝试用```m标记(Objective-C源文件的后缀名,部分高亮引擎对.m文件的语法规则支持更全面):

    @weakify(self);
    [self.bannerAdUnit fetchDemandWithAdObject:gamRequest completion:^(enum ResultCode resultCode) { 
      @strongify(self);
    }];
    
  • 自定义语法高亮规则
    如果网站使用Prism或Highlight.js,可以添加自定义规则,把@weakify和@strongify纳入合法关键字范围:
    以Prism为例,添加如下JS代码:

    Prism.languages.objc = Prism.languages.extend('clike', {
      'keyword': /\b(?:auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|restrict|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while|@weakify|@strongify)\b/
    });
    
  • 临时转义处理
    把@weakify和@strongify用反引号单独包裹,避免被高亮引擎误判:

    `@weakify`(self);
    [self.bannerAdUnit fetchDemandWithAdObject:gamRequest completion:^(enum ResultCode resultCode) { 
      `@strongify`(self);
    }];
    
  • 更换高亮引擎
    如果网站支持,切换到和Github一致的linguist驱动的高亮方案(比如rouge),能天然兼容这类Objective-C第三方宏。

内容的提问来源于stack exchange,提问作者T1D

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 13:02:09