菜鸟教程小白 发表于 2022-12-13 05:21:48

ios - "Assigning retained object to weak property"与初始化?


                                            <p><p>在玩 ARC 时,我注意到当我的字符串较弱时:</p>

<pre><code>@property (weak, nonatomic) NSString *myString;
</code></pre>

<p>然后如果我要这样做:</p>

<pre><code>self.myString = [ init];
</code></pre>

<p>甚至</p>

<pre><code>[ initWithString:@&#34;&#34;]
</code></pre>

<p>Xcode 立即警告我“将保留的对象分配给弱属性;对象将在分配后释放”。虽然我能理解,因为它的引用计数是 0,为什么它可以在没有警告的情况下工作:</p>

<pre><code>self.myString = @&#34;&#34;;
</code></pre>

<p>它对 ARC 有何影响? </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>因为当你有弱属性时,ARC 不会增加引用计数...</p>

<p>所以当你写的时候:</p>

<pre><code>self.myString = [ init];
</code></pre>

<p>ARC 就在后面加了一个<code>release</code>,因为和写一样:</p>

<pre><code>[ init];
</code></pre>

<p>与 <code>@""</code> 的主要区别在于它是一个静态字符串,以某种方式保留在其他地方...</p>

<p>每次使用 <code>@""</code> 它都指向同一个对象。</p>

<p><strong>编辑</strong>:<code>@""</code> 和<code>[ initWithString:@""]</code> 的区别在于第一个<strong >是</strong>静态字符串,在编译时处理。如果它在其他地方使用,其他用途将指向相同的静态字符串。第二,在运行时处理。它实际上创建了一个新对象,它的保留计数等等......这就是为什么 ARC 为创建的实例(你专门调用 <code>alloc</code>)做它的工作以及为什么它不关心静态字符串.</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - &#34;Assigning retained object to weak property&#34;与初始化?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/54310753/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/54310753/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - &#34;Assigning retained object to weak property&#34;与初始化?