- 博客(37)
- 收藏
- 关注
原创 iOS 查漏补缺 - LLVM & Clang
LLVM 是一个自由软件项目,它是一种编译器基础设施,以 C++ 写成,包含一系列模块化的编译器组件和工具链,用来开发编译器前端和后端。它是为了任意一种编程语言而写成的程序,利用虚拟技术创造出编译时期、链接时期、运行时期以及“闲置时期”的最优化。它最早以 C/C++ 为实现对象,而当前它已支持包括 ActionScript、Ada、D语言、Fortran、GLSL、Haskell、Java字节码...
2020-03-20 16:06:59 741
原创 iOS 查漏补缺 - RunLoop
RunLoop 在 0202 年的今天其实已经不是个新鲜的话题了,关于这方面的文章网上有很多大神总结得非常精辟。作为 iOS 查漏补缺系列,这篇文章是笔者探索 RunLoop 底层的一些知识点总结,同时也借鉴了网上一些优秀的 RunLoop 技术文章的内容。本文内容如有错误,欢迎指正。RunLoop 前导知识iOS/OS X 系统架构iOS 进化史Mac OS Classic 拥...
2020-03-16 10:31:32 599
原创 iOS 查漏补缺 - 线程
多线程是我们开发和面试中都会遇到的一个重要概念,相比于其他编程语言和平台,iOS 的多线程使用起来要比较友好和易用一些。但是对于多线程的基本概念,我们还是需要重视起来,这对于我们探索 pthread、NSThread、GCD 以及 RunLoop 都大有裨益。本节的大部分内容基于苹果官方文档。文档地址: About Threaded Programming前导知识POSIXPO...
2020-03-13 12:26:48 335
原创 iOS 查漏补缺 - PerformSelector
performSelector 系列的函数我们都不陌生,但是对于它不同的变种以及底层原理在很多时候还是容易分不清楚,所以笔者希望通过 runtime 源码以及 GUNStep 源码来一个个抽丝剥茧,把不同变种的 performSelector 理顺,并搞清楚每个方法的底层实现,如有错误,欢迎指正。本文的代码已放在 Github ,欢迎自取一、NSObject 下的 PerformSele...
2020-03-12 23:16:56 416
原创 iOS 底层探索 - KVC
一、KVC 初探Key Value Coding 也即 KVC 是 iOS 开发中一个很重要的概念,中文翻译过来是 键值编码 ,关于这个概念的具体定义可以在 Apple 的官方文档处找到。Key-value coding is a mechanism enabled by the NSKeyValueCoding informal protocol that objects adopt to...
2020-02-28 16:29:47 371
原创 iOS 底层探索 - 类拓展和关联对象
前面我们探索了 iOS 中类和分类的加载,关于类这一块的内容,我们还有一些坑没有填,比如类拓展和关联对象,今天让我们一起填下这块的坑。一、类拓展1.1 什么是类拓展?关于类拓展的具体定义,大家可以直接参考 Apple 对于类拓展的说明。A class extension bears some similarity to a category, but it can only be add...
2020-02-26 15:01:18 243
原创 iOS 底层探索 - 分类的加载
一、初探懒加载类上一章我们探索了 iOS 中类的加载,让我们简单回顾一下大概的流程。1.1 类的加载回顾libObjc 向 dyld 注册了回调 _dyld_objc_notify_register,当 dyld 把 App 以及 App 所依赖的一系列 Mach-O 镜像加载到当前 App 被分配的内存空间之后,dyld 会通过 _dyld_objc_notify_mapped 也就...
2020-02-25 17:22:23 369
原创 iOS 底层探索 - 类的加载
一、应用加载回顾上一章我们对应用的加载有了初步的认识,我们知道了系统调用 exec() 会我们的应用映射到新的地址空间然后通过 dyld 进行加载、链接、初始化主程序和主程序所依赖的各种动态库最后在 initializeMainExecutable 方法中经过一系列初始化调用 notifySingle 函数,该函数会执行一个 load_images 的回调然后在 doModinit...
2020-02-25 17:21:16 525
原创 iOS 底层探索 - 应用加载
App 从被用户在主屏幕上点击之后就开启了它的生命周期,那么在这之中,究竟发生了什么呢?让我们从 App 启动开始探索。在探索之前,我们需要熟悉一些前导知识点。一、前导知识以下参考自 WWDC 2016 Optimizing App Startup Time :1.1 Mach-OMach-O is a bunch of file types for different run ...
2020-02-25 17:18:05 515
原创 iOS 底层探索 - 消息转发
一、动态方法解析流程分析我们在上一章《消息查找》分析到了动态方法解析,为了更好的掌握具体的流程,我们接下来直接进行源码追踪。我们先来到 _class_resolveMethod 方法,该方法源码如下:void _class_resolveMethod(Class cls, SEL sel, id inst){ if (! cls->isMetaClass()) { ...
2020-02-25 17:14:24 263
原创 iOS 底层探索 - 消息查找
一、objc_msgSend 汇编补充我们知道,之所以使用汇编来实现 objc_msgSend 有两个原因:因为 C 无法通过写一个函数来保留未知的参数并且跳转到一个任意的函数指针。objc_msgSend 必须足够快。1.1 objc_msgSend 流程ENTRY _objc_msgSend对消息接收者进行判断、处理 (id self, sel _cmd)taggedP...
2020-02-25 17:10:44 216
原创 iOS 底层探索 - 方法
我们在前面探索了对象和类的底层原理,接下来我们要探索一下方法的本质,而在探索之前,我们先简单过一遍 Runtime 的知识点,如果读者对这块内容已经很熟悉了的话可以直接跳过第一章。PS: 由于笔者对汇编暂时还是摸索的阶段,关于汇编源码的部分如有错误,欢迎指正。一、Runtime 简介众所周知,Objective-C 是一门动态语言,而承载整个 OC 动态特性的就是 Runtime。关于...
2020-02-25 17:09:34 260
原创 iOS 底层探索 - cache_t
上一篇我们一起探索了 iOS 类的底层原理,其中比较重要的四个属性我们都简单的过了一遍,我们接下来要重点探索第三个属性 cache_t,对于这个属性,我们可以学习到苹果对于缓存的设计与理解,同时也会接触到消息发送相关的知识。一、探索 cache_t1.1 cache_t 基本结构我们还是先过一遍 OC 中类的结构:struct objc_class : objc_object { ...
2020-02-25 17:08:11 326
原创 iOS 底层探索 - 类
我们在前面探索了 iOS 中的对象原理,面向对象编程中有一句名言:万物皆对象那么对象又是从哪来的呢?有过面向对象编程基础的同学肯定都知道是类派生出对象的,那么今天我们就一起来探索一下类的底层原理吧。一、iOS 中的类到底是什么?我们在日常开发中大多数情况都是从 NSObject 这个基类来派生出我们需要的类。那么在 OC 底层,我们的类 Class 到底被编译成什么样子了呢?我们新...
2020-02-25 17:06:43 270
原创 iOS 底层探索 - calloc 和 isa
上一篇文章主要我们探索了 iOS 对象的 alloc 和 init 以及对象是怎么开辟内存以及初始化的,如果在对象身上增加一些属性,是否会影响内存开辟呢?还有一个遗留问题就是通过 calloc ,我们的对象有了内存地址,但是对象结构里面的 isa 是怎么关联到我们的对象的内存地址的呢。一、calloc 底层探索在探索 calloc 底层前,我们先补充一下内存对齐相关的知识点。1.1 ...
2020-02-25 17:00:36 272
原创 iOS 底层探索 - alloc & init
alloc & init 探索作为 iOS 开发者,我们每天打交道最多的应该就是对象了,从面向对象设计的角度来说,对象的创建以及初始化是最基础的内容。那么,今天我们就一起来探索一下 iOS 中最常用的 alloc 和 init 的底层是怎么实现的吧。一、 如何进行底层探索对于第三方开源框架来说,我们去剖析内部原理和细节是有一定的方法和套路可以掌握的。而对于 iOS 底层,特...
2020-02-25 16:58:23 362
原创 .NET WEB API 对接支付宝支付
.NET WEB API 对接支付宝支付转载请注明出处:http://leejunhui.com/2017/02/09/AliPayWithWebAPI/最近一个项目中需要自己前后台全栈,几经权衡之后,在还是选择了自己最为熟悉的.NET WEB API技术来实现服务器端。可能是由于太久没接触.NET了,在对接支付宝APP支付的时候,遇到了不少坑,废话不多说,直接上代码吧。public class A
2017-02-14 16:07:51 3275 1
翻译 [译] Alamofire Tutorial: Getting Started
[译] Alamofire Tutorial: Getting Started转载请注明出处:http://leejunhui.com/2017/01/23/Alamofire-Tutorial/ 本文翻译自Raywenderlich的Alamofire Tutorial: Getting Started注:已更新到Alamofire 4, Xcode 8.2, iOS 10以及Swift 3
2017-01-23 15:42:11 511
翻译 Node.js[译] Overview of Blocking vs Non-Blocking
Overview of Blocking vs Non-Blocking这篇文章主要内容为node.js中阻塞和非阻塞的区别。其中,eventloop和libuv会被引用到,不过并不需要你之前就了解过这些知识。我们假设本文的读者至少对Javascript和node.js回调设计模式要有基本的理解和掌握。`I/O`在本文中主要指的是由`libuv`提供支持的与磁盘和网络发生的交互。Blocking阻
2017-01-13 23:18:34 705
翻译 iOS7极限编程 第一部分 第二章 世界是扁平化的:新的UI范式 (译)
iOS7给你带来了清新的UI界面。iOS7UI上的改变是iOS历史上最为重大的。iOS7的三大特性Clarity 清楚,明晰,透明Deference 顺从,尊重Depth 深度, 层次感深入理解这些特性是很重要的,因为这可以使你的app达到和系统的app同样水准的UI效果Clarity, Deference and DepthClarity 简单来说就是对用户更加清新。大多数用
2015-09-26 23:56:41 537
原创 单例模式的实现(ARC与非ARC)
单例模式是一种很重要的设计模式,在iOS开发中,通过使用单例设计模式来实现在程序生命周期内只有一个实例存在来节省内存开销。下面是ARC中单例模式的实现代码:在自定义的类.m文件中,需要实现下列的方法#import"HMAudioTool.h"@interfaceHMAudioTool()@end@implementationHMAudioTool//
2015-04-12 21:09:12 498
原创 UIPopoverController初探
最近开始学习iPad开发,接触到了许多新知识。与iPhone上的学习一样,我还是从Apple的官方文档开始看,遇到的第一个比较有代表性的就是UIPopoverController了。今天就来总结一下它的相关要点吧。(下面的引用内容均出自Apple官方文档)The UIPopoverController class is used to manage the presentation o
2015-04-12 12:01:46 472
原创 iOS开发笔记 --iOS7 API 对sizeWithFont的替代方法
NSDictionary *attribute = [NSDictionarydictionaryWithObjectsAndKeys:[UIFontsystemFontOfSize:15],NSFontAttributeName,nil]; CGSize contentSize = [_weibo.contentboundingRectWithSize:CGSizeMa
2014-06-11 11:29:15 961
转载 UIScrollView 滚动视图—IOS开发
文章出处:http://blog.csdn.net/iukeyUIScrollView 类负责所有基于 UIKit 的滚动操作。一、创建[java] view plaincopyprint?CGRect bounds = [ [ UIScreen mainScreen ] applicationFrame ] ; U
2014-03-22 20:40:25 678
原创 iOS文档-UIView的基本属性
注:以下内容为本人根据苹果官方文档加上自己的理解写成。UIView#苹果官方文档对UIView(UIViewGeometry)的描述如下: // animatable. do not use frame if view is transformed //since it will not correctly reflect the actual location of the
2014-02-14 21:57:02 785
原创 iOS简单计算器
本人新手一枚,算法很挫,望大神指导一番//// SimpleCaculatorViewController.h// SimpleCaculator//// Created by LI Junui on 14-2-12.// Copyright (c) 2014年 LEE JUNHUI. All rights reserved.//#import @interface
2014-02-12 20:14:39 1384
原创 Objective-C语法系列(一)
类的声明 在.h文件中 @interface 类名 : NSObject @end类的实现 在.m文件中 @implementation 类名 @end 方法的声明与实现 +:表示类方法 (静态方法) -:表示对象方法(动态方法)成员变量的作用域有三种
2013-11-06 15:40:33 611
原创 决定了,步入IOS开发的大门!
在大二这个关键的时间段,我没有继续参加ACM了,转而开始学习Objective-C,为IOS开发打好基础,当然,以后也会学安卓开发。我给自己定的时间是今年年底前能初步掌握IOS开发基础,只有三个月一点了,没有多余的时间去浪费了。有对IOS开发感兴趣的童鞋,我们可以交流经验。当然,作为一个只学了一年C语言和了解一些算法的我,还是得向大神们请教,我相信,奋斗就会有结果!COME ON!
2013-09-25 21:13:10 676
原创 ACM的小学期结束了。。
一个月的时间飞快地过去了,在实验中心的小学期实训也进入了尾声了。回首这一个月时光,自己在OJ上收获了许多平时都无法获取的新东西。最开始刚进来的时候,自己只是抱着对这学期学的数据结构学得不好,来补补拉下的知识的想法,后来,自己已经开始愿意掌握更多与ACM有关的知识了,这大概是编程的魅力吧!其实一个月说长不长,说短不短。每天的不断做题的过程中,遇到的问题可以说是各种各样,有时自己几乎是对问题无从下
2013-07-19 17:46:57 878
转载 ACM常用算法
在网上看到的,准备按着这个一项一项练习~~第一阶段:练经典常用算法,下面的每个算法给我打上十到二十遍,同时自己精简代码,因为太常用,所以要练到写时不用想,10-15分钟内打完,甚至关掉显示器都可以把程序打出来. 1.最短路(Floyd、Dijstra,BellmanFord) 2.最小生成树(先写个prim,kruscal要用并查集,不好写) 3.大数(高精度)加减乘除
2013-07-16 11:17:27 716
原创 一个大一的软件工程专业学生对编程的认识....(从抵触到渐渐接受)
LZ本人是从上了大学之后才开始接触编程的,在之前完全对这个东东是没有基础和兴趣的。但是,来到了大学,选择了自己并不是最喜欢的专业,总不能一天到晚都LOL吧,所以就强迫自己去学编程了。第一学期我们学校给我们上的是《C语言程序设计第四版(谭浩强版)》,当时我是那个糊涂啊,由于本人从小逻辑思维不是很强,所以学起来实在吃力。。而且这本书老师也只仅仅上了不到二分之一,其余的部分都要自己在课余时间自学。可能当
2013-06-22 19:45:38 2732 4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人