Skip to content

Commit 9d98119

Browse files
committed
Site updated: 2025-02-12 10:18:29
1 parent 8f1e0c3 commit 9d98119

4 files changed

Lines changed: 4 additions & 4 deletions

File tree

2023/10/21/iOS/揭开 iOS 中 weak 指针的神秘面纱:从原理到实践/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
</head><body><canvas class="fireworks"></canvas><i class="fa fa-arrow-right" id="toggle-sidebar" aria-hidden="true"></i><div id="sidebar" data-display="true"><div class="toggle-sidebar-info text-center"><span data-toggle="切换文章详情">切换站点概览</span><hr></div><div class="sidebar-toc"><div class="sidebar-toc__title">目录</div><div class="sidebar-toc__progress"><span class="progress-notice">你已经读了</span><span class="progress-num">0</span><span class="progress-percentage">%</span><div class="sidebar-toc__progress-bar"></div></div><div class="sidebar-toc__content"><ol class="toc"><li class="toc-item toc-level-2"><a class="toc-link" href="#%E5%89%8D%E8%A8%80"><span class="toc-number">1.</span> <span class="toc-text">前言</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#weak-%E6%8C%87%E9%92%88%E4%B9%8B%E7%BC%96%E8%AF%91%E6%9C%9F%E5%AE%9E%E7%8E%B0"><span class="toc-number">2.</span> <span class="toc-text">weak 指针之编译期实现</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#weak-%E6%8C%87%E9%92%88%E4%B9%8B%E8%BF%90%E8%A1%8C%E6%97%B6%E5%AE%9E%E7%8E%B0"><span class="toc-number">3.</span> <span class="toc-text">weak 指针之运行时实现</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#weak-%E6%8C%87%E9%92%88%E7%9A%84%E5%88%9D%E5%A7%8B%E5%8C%96%E7%BB%86%E8%8A%82%EF%BC%9AstoreWeak"><span class="toc-number">3.1.</span> <span class="toc-text">weak 指针的初始化细节:storeWeak</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#weak-%E6%8C%87%E9%92%88%E5%BB%BA%E7%AB%8B%E5%85%B3%E8%81%94%E7%9A%84%E7%BB%86%E8%8A%82%EF%BC%9Aweak-register-no-lock"><span class="toc-number">3.2.</span> <span class="toc-text">weak 指针建立关联的细节:weak_register_no_lock</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E6%B7%B1%E5%85%A5%E5%89%96%E6%9E%90-SideTable-%E7%B1%BB%E5%9E%8B"><span class="toc-number">4.</span> <span class="toc-text">深入剖析 SideTable 类型</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#weak-%E6%8C%87%E9%92%88%E8%87%AA%E5%8A%A8%E8%B5%8B%E5%80%BC-nil-%E7%9A%84%E5%AE%9E%E7%8E%B0%E7%BB%86%E8%8A%82%EF%BC%9Aweak-clear-no-lock"><span class="toc-number">5.</span> <span class="toc-text">weak 指针自动赋值 nil 的实现细节:weak_clear_no_lock</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E6%80%BB%E7%BB%93"><span class="toc-number">6.</span> <span class="toc-text">总结</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E5%85%B3%E4%BA%8E-weak-%E6%8C%87%E9%92%88%E7%9A%84%E4%B8%80%E4%BA%9B%E7%96%91%E9%97%AE%E4%B8%8E%E8%A7%A3%E7%AD%94"><span class="toc-number">7.</span> <span class="toc-text">关于 weak 指针的一些疑问与解答</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#%E4%B8%BA%E4%BB%80%E4%B9%88%E4%B8%8D%E8%83%BD%E7%BB%99-Category-%E6%B7%BB%E5%8A%A0-weak-%E5%B1%9E%E6%80%A7%EF%BC%9F"><span class="toc-number">7.1.</span> <span class="toc-text">为什么不能给 Category 添加 weak 属性?</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E4%B8%BA%E4%BB%80%E4%B9%88%E5%9C%A8-block-%E4%B8%AD%E4%B8%8D%E8%83%BD%E4%BD%BF%E7%94%A8-weak-%E6%8C%87%E9%92%88%E8%AE%BF%E9%97%AE%E5%85%B6%E6%88%90%E5%91%98%E5%8F%98%E9%87%8F%E3%80%82"><span class="toc-number">7.2.</span> <span class="toc-text">为什么在 block 中不能使用 weak 指针访问其成员变量。</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E4%B8%BA%E4%BB%80%E4%B9%88%E5%9C%A8%E5%AF%B9%E8%B1%A1%E6%B2%A1%E6%9C%89%E5%BC%B1%E5%BC%95%E7%94%A8%E6%97%B6%E4%B9%9F%E4%BC%9A%E6%89%A7%E8%A1%8C-weak-clear-no-lock"><span class="toc-number">7.3.</span> <span class="toc-text">为什么在对象没有弱引用时也会执行 weak_clear_no_lock</span></a></li></ol></li></ol></div></div><div class="author-info hide"><div class="author-info__avatar text-center"><img src="https://github.com/internetWei/internetwei.github.io/blob/master/images/avatar.jpg?raw=true"></div><div class="author-info__name text-center">布多</div><div class="author-info__description text-center">前进!前进!!不择手段地前进!!!</div><div class="follow-button"><a target="_blank" rel="noopener" href="https://github.com/internetwei">Follow Me</a></div><hr><div class="author-info-articles"><a class="author-info-articles__archives article-meta" href="/archives"><span class="pull-left">文章</span><span class="pull-right">9</span></a><a class="author-info-articles__tags article-meta" href="/tags"><span class="pull-left">标签</span><span class="pull-right">8</span></a><a class="author-info-articles__categories article-meta" href="/categories"><span class="pull-left">分类</span><span class="pull-right">4</span></a></div><hr><div class="author-info-links"><div class="author-info-links__title text-center">友链</div><a class="author-info-links__name text-center" target="_blank" rel="noopener" href="https://www.coderqi.com/">齐小胖之家</a></div></div></div><div id="content-outer"><div id="top-container" style="background-image: url(/images/backgroundImage.jpg)"><div id="page-header"><span class="pull-left"> <a id="site-name" href="/">布多的博客</a></span><i class="fa fa-bars toggle-menu pull-right" aria-hidden="true"></i><span class="pull-right menus"> <a class="site-page" href="/">首页</a><a class="site-page" href="/tags">标签</a><a class="site-page" href="/categories">分类</a><a class="site-page" href="/archives">归档</a><a class="site-page" href="/about">关于</a></span><span class="pull-right"><a class="site-page social-icon search"><i class="fa fa-search"></i><span> 搜索</span></a></span></div><div id="post-info"><div id="post-title">揭开 iOS 中 weak 指针的神秘面纱:从原理到实践</div><div id="post-meta"><time class="post-meta__date"><i class="fa fa-calendar" aria-hidden="true"></i> 2023-10-21</time><span class="post-meta__separator">|</span><i class="fa fa-inbox post-meta__icon" aria-hidden="true"></i><a class="post-meta__categories" href="/categories/iOS/">iOS</a><div class="post-meta-wordcount"><span>字数总计: </span><span class="word-count">5.2k</span><span class="post-meta__separator">|</span><span>阅读时长: 19 分钟</span></div></div></div></div><div class="layout" id="content-inner"><article id="post"><div class="article-container" id="post-content"><blockquote>
1919
<p>由 布多(budo) 发布于 2023-10-21 • 最后更新于 2025-02-10</p>
2020
</blockquote>
21-
<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p><img src="/%E6%8F%AD%E5%BC%80%20iOS%20%E4%B8%AD%20weak%20%E6%8C%87%E9%92%88%E7%9A%84%E7%A5%9E%E7%A7%98%E9%9D%A2%E7%BA%B1%EF%BC%9A%E4%BB%8E%E5%8E%9F%E7%90%86%E5%88%B0%E5%AE%9E%E8%B7%B5/entrance2.png"></p>
21+
<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p><img src="/2023/10/21/iOS/%E6%8F%AD%E5%BC%80%20iOS%20%E4%B8%AD%20weak%20%E6%8C%87%E9%92%88%E7%9A%84%E7%A5%9E%E7%A7%98%E9%9D%A2%E7%BA%B1%EF%BC%9A%E4%BB%8E%E5%8E%9F%E7%90%86%E5%88%B0%E5%AE%9E%E8%B7%B5/entrance2.png"></p>
2222
<p>weak 指针是 iOS 开发中一个非常基础的概念,在开发过程中我们经常使用它,它到底是怎么实现的?这篇文章将从 Runtime 源码入手,为你介绍 weak 指针的实现原理;让你知其然,更知其所以然。</p>
2323
<h2 id="weak-指针之编译期实现"><a href="#weak-指针之编译期实现" class="headerlink" title="weak 指针之编译期实现"></a>weak 指针之编译期实现</h2><p>当我们初始化一个 weak 指针时: <code>__weak typeof(obj) weakObj = obj;</code>,编译器其实会把它们转换成类似这样的代码:<code>objc_initWeak((void *)&amp;weakObj, obj);</code></p>
2424
<p><img src="https://github.com/internetWei/internetwei.github.io/blob/master/images/%E6%8F%AD%E5%BC%80%20iOS%20%E4%B8%AD%20weak%20%E6%8C%87%E9%92%88%E7%9A%84%E7%A5%9E%E7%A7%98%E9%9D%A2%E7%BA%B1%EF%BC%9A%E4%BB%8E%E5%8E%9F%E7%90%86%E5%88%B0%E5%AE%9E%E8%B7%B5/entrance.png?raw=true" alt="weak 指针的初始化入口"></p>

about/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ <h2 id="我是谁"><a href="#我是谁" class="headerlink" title="我是谁"></a
2929
<p>我很少玩游戏和刷短视频。我曾经也很喜欢诸如穿越火线、英雄联盟等游戏,也喜欢刷头条;现在已经戒了,因为我发现它们实在太容易让人上瘾了。</p>
3030
<p>我以前有很强的完美主义者倾向,曾经花了1天时间就为了寻找一个合适的方法名称;后来经过时间的磨练,现在已经能很好的平衡这种完美和效率了😂。过于追求完美的开端会让你永远无法开始,过于追求细节会让你永远无法结束。</p>
3131
<p>博客的内容包含iOS领域、IT领域,有时候也会有一些个人感想等等,类型不限。</p>
32-
<h2 id="联系方式"><a href="#联系方式" class="headerlink" title="联系方式"></a>联系方式</h2><p>邮箱:<a href="mailto:&#105;&#110;&#x74;&#101;&#114;&#x6e;&#x65;&#116;&#119;&#x65;&#x69;&#x40;&#x66;&#x6f;&#x78;&#x6d;&#x61;&#x69;&#108;&#x2e;&#99;&#x6f;&#x6d;">&#105;&#110;&#x74;&#101;&#114;&#x6e;&#x65;&#116;&#119;&#x65;&#x69;&#x40;&#x66;&#x6f;&#x78;&#x6d;&#x61;&#x69;&#108;&#x2e;&#99;&#x6f;&#x6d;</a></p>
32+
<h2 id="联系方式"><a href="#联系方式" class="headerlink" title="联系方式"></a>联系方式</h2><p>邮箱:<a href="mailto:&#x69;&#x6e;&#116;&#101;&#114;&#110;&#101;&#116;&#119;&#101;&#105;&#x40;&#102;&#111;&#x78;&#109;&#x61;&#105;&#108;&#x2e;&#x63;&#111;&#109;">&#x69;&#x6e;&#116;&#101;&#114;&#110;&#101;&#116;&#119;&#101;&#105;&#x40;&#102;&#111;&#x78;&#109;&#x61;&#105;&#108;&#x2e;&#x63;&#111;&#109;</a></p>
3333
<h2 id="结尾"><a href="#结尾" class="headerlink" title="结尾"></a>结尾</h2><p>如果你看到了这里,并且你觉得你也是这样的人,想改变世界的人,不要犹豫,马上联系我:<u><a href="mailto:internetwei@foxmail.com">internetwei@foxmail.com</a></u>,我很期待和您成为挚友。</p>
3434
</div></article><nav id="pagination"><div class="pagination"></div></nav><div id="lv-container" data-id="city" data-uid="MTAyMC81MzU5Ny8zMDA3MA=="><script>(function(d, s) {
3535
var j, e = d.getElementsByTagName(s)[0];

atom.xml

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

search.xml

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)