菜鸟教程小白 发表于 2022-12-12 21:41:26

ios - 为什么CALayer的category可以不用实现就声明一个属性直接使用?


                                            <p><p>据我所知,你不应该在一个类别中定义一个实例变量,如果你声明一个属性,那只意味着你声明了“setter & getter”方法。</p>

<pre><code>@interface CALayer (XQ)
    @property NSString *demoVar;
    - (void)demoFunc;
@end
@implementation CALayer (XQ)
    - (void)demoFunc {
      self.demoVar = @&#34;cuteeeee&#34;;
      NSLog(@&#34;%@&#34;, self.demoVar);// when i call this method, it should crash, but the output is normal, why?
    }
@end
</code></pre>

<p>对不起,我的英语和短语很差,谢谢。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p><code>CALayer.h</code> 中的注释指出:</p>

<pre><code>/** Property methods. **/

/* CALayer implements the standard NSKeyValueCoding protocol for all
* Objective C properties defined by the class and its subclasses. It
* dynamically implements missing accessor methods for properties
* declared by subclasses.
</code></pre>

<p>显然 <code>CALayer</code> 对待在类别中声明的属性与对待在子类中声明的属性相同,因此它会为您动态实现访问器方法。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 为什么CALayer的category可以不用实现就声明一个属性直接使用?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/38793970/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/38793970/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 为什么CALayer的category可以不用实现就声明一个属性直接使用?