Git Product home page Git Product logo

ios-source-probe's Introduction

(图片设计:冬瓜

Link

Gitbook:iOS 源码探求

个人博客:Guardia · 瓜地

小专栏:iOS 源码探求

其中小专栏需要付费,其他均为免费。当然如果觉得其中收录文章有价值,欢迎到小专栏付费阅读。如果需要下载成 pdf、mobi 或 epub 可以到 Gitbook 上免费下载。

Description

为什么要做这个仓库,是为了促进自己阅读代码,从而巩固自身基础。从非科班出身、acm的错误洗礼下,本人需要认识更多的底层知识,从而纠正自己对Computer Science的观念。我将自己理解和阅读的一些源码、文档的笔记与博文与大家分享,接受希望大家的指正。倘若你有兴趣和我一起来阅读源码并分享阅读笔记,可以发起pull request

如有疑问,可以在issue中发起。讨论得出结论,才能获得进步。

本仓库的源码分享暂时以Objective-CSwiftC++CPython为主,这些是笔者日常接触的语言。如果想与笔者交流,可以关注新浪微博 @冬瓜争做全栈瓜

另外,也可以访问作者个人blog来阅读:http://www.desgard.com

Content

Language Framework Version Article
Objective-C <objc/runtime.h> 708 浅谈Associated Objects
对象方法消息传递流程
消息转发过程分析
用 isa 承载对象的类信息
weak 弱引用的实现方式
load 方法全程跟踪
浅谈 block(1) - clang 改写后的 block 结构
浅谈 block(2) - 截获变量方式
C cctools/include/mach-o 895 Mach-O 文件格式探索
C Fishhook 巧用符号表 - 探求 fishhook 原理(一)
验证试验 - 探求 fishhook 原理(二)
Objective-C Foundation 从经典问题来看 Copy 方法
CFArray 的历史渊源及实现原理
Runloop 记录与源码注释(作者:@kylinroc)
Objective-C UIKit 复用的精妙 - UITableView 复用技术原理分析
AutoLayout 中的线性规划 - Simplex 算法
Objective-C SDWebImage v3.8.1 SDWebImage Source Probe: WebCache
SDWebImage Source Probe: Manager
SDWebImage Source Probe: Downloader
SDWebImage Source Probe: Operation
Swift Source Code v4.0 Swift Probe - Optional
Python Shadowsocks v2.9.1 Shadowsocks Probe I - Socks5 与 EventLoop 事件分发
Shadowsocks Probe II - TCP 代理过程

Errata

可以发起issue或者pull request进行勘误。

Copyright

© 以下文章版权属于 《iOS 成长之路》 所有。

© 以下文章版权属于 Devqa 专栏 所有。

The MIT License (MIT)

iOS-Source-Probe 以 MIT 开源协议发布,转载引用请注明出处。

MIT License

ios-source-probe's People

Contributors

desgard avatar yousanflics avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ios-source-probe's Issues

纯属问个问题 ^ ^

看了你这篇 《weak 弱引用的实现方式》 文章 ,里面提到 :

“单步运行,发现会跳入 NSObject.mm 中的 objc_initWeak() 这个方法。在进行编译过程前,clang 其实对 __weak 做了转换,将声明方式做出了如下调整。”

我想问下 你是怎么知道 调用 objc_initWeak 这个函数的? 我自己尝试着 clang, 转换的代码如下:

//转换前

{
            NSObject *obj = [[NSObject alloc] init];
            __weak id obj1 = obj;
        }


//转换后

{
            NSObject *obj = ((NSObject *(*)(id, SEL))(void *)objc_msgSend)((id)((NSObject *(*)(id, SEL))(void *)objc_msgSend)((id)objc_getClass("NSObject"), sel_registerName("alloc")), sel_registerName("init"));
            __attribute__((objc_ownership(weak))) id obj1 = obj;
        }

然后 objc_ownership() 又是啥? 我在 runtime 源码里木有搜到...

关于storeWeak方法中为什么会和初始化机制引发死锁问题

// Prevent a deadlock between the weak reference machinery
    // and the +initialize machinery by ensuring that no 
    // weakly-referenced object has an un-+initialized isa.
    if (haveNew  &&  newObj) {
        Class cls = newObj->getIsa();
        if (cls != previouslyInitializedClass  &&  
            !((objc_class *)cls)->isInitialized()) 
        {
            SideTable::unlockTwo<haveOld, haveNew>(oldTable, newTable);
            _class_initialize(_class_getNonMetaClass(cls, (id)newObj));

            // If this class is finished with +initialize then we're good.
            // If this class is still running +initialize on this thread 
            // (i.e. +initialize called storeWeak on an instance of itself)
            // then we may proceed but it will appear initializing and 
            // not yet initialized to the check above.
            // Instead set previouslyInitializedClass to recognize it on retry.
            previouslyInitializedClass = cls;

            goto retry;
        }
    }

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.