哈雷的博客

Write the code, Change the World!

iOS 应用创建APNS 和 VOIP的pem证书流程

早期的极光推送和友盟推送也是需要上传pem文件的,不过可能对接入SDK的开发者来说,要用一堆的命令生成pem文件还是有些太麻烦了,所以现在都改成了上传p12文件,输入密码的形式,这样极大的简化了开发人员使用SDK的流程。 因为服务器端是自己实现的APNS和VOIP,所以每次给客户部署服务器后,对应...

2019-04-03 20:09:08

阅读数 71

评论数 1

alloc/retain/release/dealloc的底层实现(上)

要理解底层实现,需要用到如下开源代码。 下载GNUstep的地址:GNUstep Core Runtime源码objc4-750:Runtime源码objc4-750 GNUstep就是使用早期的Objective-C来实现的,通过其开源的Foundation框架能否一窥NSObject的实现。 ...

2019-03-29 22:25:40

阅读数 34

评论数 0

# iOS中的KVO底层实现

KVO是Key-Value-Observer的缩写,使用的是观察者模式。底层实现机制都是isa-swizzing,就是在底层调用object_setClass函数,将对象的isa指向的Class偷偷换掉。 而观察者模式就是 目标对象(被观察的对象)管理所有依赖于它的观察者对象,并在它自身的状态改变...

2019-03-25 18:11:35

阅读数 37

评论数 0

iOS 中的内存管理

在讲述iOS中的内存管理之前,先介绍一下其他语言中的内存管理,其实内存管理主要讲的是堆内存的管理,因为其他类型的内存,比如栈内存、全局变量/静态区内存、常量等各种语言的内存管理都差不多。 Java中的内存管理 Java中的内存管理由JVM完全负责,java中的"垃圾回收器(GC)&quo...

2019-03-21 02:51:05

阅读数 31

评论数 0

__block变量存储域

将Block赋值给strong 类型的block变量,或者赋值给strong 修饰的对象类型中的block成员变量时,block会从栈复制到堆上。那__block变量会有什么变化呢? 其实,当block 被从栈复制到堆上时,block中使用到的变量也会从栈赋值到堆上。 当block被从栈复制到堆前...

2019-03-16 22:46:13

阅读数 43

评论数 0

Block运行时的类型以及Block是对象的验证

Block运行时的类型 在用Clang命令,将block相关源代码转换为C++源码代码后。 可以看到函数内的原始Block的isa 都是_NSConcreteStackBlock,但是其实际的类型会在运行时,根据实际情况变更和转换。 这里用源码测试Block在实际运行场景下的类型。 这里先针对函...

2019-03-15 00:30:21

阅读数 36

评论数 0

为什么Block超出变量作用域还可以继续存在?

Block中的存储域 1.Block的类型 通过前文说明可知,Block会转换为Block的结构体类型的自动变量(例如__main_block_impl_0类型的自动变量),__block 修饰的变量会转换为__block变量的结构体类型的自动变量(例如__Block_byref_count_0类...

2019-03-10 23:21:44

阅读数 31

评论数 0

变量的声明、变量的定义、变量的初始化

变量的声明:用于向程序表明变量的类型和名字。 变量的定义:用于为变量分配存储空间,还可以为变量指定初始值。 变量的初始化:为变量指定初始值。 广义上来说,变量的声明有两种情况: 1.需要建立存储空间的声明。例如:int a,我们在声明的时候就建立的存储空间。 2.不需要建立存储空间的声明。例如:...

2019-03-10 14:07:49

阅读数 26

评论数 0

__block 说明符的作用以及其对Clang编译器的影响

__block 不同于 __strong 和 __weak,后面两个是所有权说明符,而__block是存储域说明符,该说明符会影响变量的存储域。 常见的存储域说明符还有: typedef extern static auto register 存储域说明符用于指定将变量值设置到哪个存储域中。例...

2019-03-07 23:32:58

阅读数 70

评论数 0

Block中是如何实现截获自动变量值的呢?

我们都说block会捕获(持有)它使用到的局部变量的值,可是它是如何实现捕获自动变量的值的呢? 下面依然是使用一段代码,然后用Clang进行转换,来分析其过程。 1.使用Clang对比转换前后的代码 转换前的main.m源码: #import <Foundation/...

2019-03-04 00:46:10

阅读数 723

评论数 0

Clang 是如何编译Block的?

在开始介绍Clang编译Block之前,可以先了解下Clang编译器: Xcode clang 编译器 中文 The Compiler 英文原文 上一篇文章说,Block 是“带有自动变量值的匿名函数”,但是看到本文中Clang将源码转换成C++源码后的内容,会发现Block的功能其实是由几个结构...

2019-03-03 21:20:50

阅读数 75

评论数 0

iOS block简介

Block 是iOS 4 才引入的C语言扩充功能。 block是什么? block 就是带有自动变量(就是局部变量)值的匿名函数。顾名思义就是带有自动变量(也就是局部变量)值的不带名称的函数。 自动变量值是啥意思呢? 先回顾下C语言中的函数里可能使用的变量类型: 自动变量(局部变量) 函数的参数...

2019-02-16 15:59:07

阅读数 31

评论数 0

二叉树

1.什么是二叉树? 二叉树(Binary Tree)是 n(n ≥ 0)个结点点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。 2.二叉树的特点 每个结点最多有两棵子树,所以二叉树中不存在度大于2的结点。注意不是只...

2019-02-15 20:17:22

阅读数 43

评论数 0

# iOS导航栏控制Tips

许久不写UI,对UI的很多东西都生疏了,最近使用导航栏的各种场景做一些总结。 1.导航栏的显示与隐藏 导航栏的显示与隐藏,分两种情况: 1.从不显示导航栏的页面push到显示导航栏的页面。 2.从显示导航栏的页面Push到不显示导航栏的页面。 注意: 1.如果导航栏不显示时,系统的侧滑返回功...

2018-12-17 19:10:16

阅读数 50

评论数 0

Android 页面跳转模式

简介 Android 中的页面跳转与iOS中的页面跳转非常的不同。 Android中的更简单也更复杂,说其更简单是因为Android 中打开一个新的页面一般用用类似如下的代码: Intent intent = new Intent(this, MainDetailActivity.class); ...

2018-11-16 23:31:26

阅读数 1084

评论数 0

Android 四大组件之Activity

Activity 是安卓四大组件之一,也是最常用最重要的组件。 四大组件:Activity、Service、Content provider、Broadcast Receiver。 通常一个Activity表示的就是一屏(也就是App的某个界面)。Activity 相当于MVC模式中的Contro...

2018-10-27 23:32:15

阅读数 477

评论数 1

Android 自定义shape、selector、layer-list样式

本篇记录下几种常见的自定义样式。 1.设置视图的圆角 Android中的设置圆角跟iOS中不太一样,但是我感觉,Android自定义shape 应该类似于给视图设置一个底层背景的layer。怎么做呢? 首先创建一个自定义的drawable文件,New --> Draw...

2018-10-08 23:55:37

阅读数 56

评论数 0

Android 基础控件(三)

10.ScrollView 当界面上要展示的内容大于一屏时,我们就会用到滚动视图或者滚动视图的子类。 ScrollView 仅可以上下滚动。 而HorizontalScrollView只可以左右滑动。 但是滚动视图内只能有一个视图,所以一般都是将多个视图放在layout内。 示例代码: &...

2018-10-06 23:35:33

阅读数 50

评论数 0

Android 基础控件(二)

本文记录一下Android中的常用的基础控件:TextView、EditText、Button、RadioButton、CheckBox、ImageView、ProgressBar、DatePicker、ScrollView、WebView、ListView。 1.基类View 基本所有的UI控件...

2018-09-20 21:35:12

阅读数 79

评论数 0

Android基础控件之基本属性

Android中所有的UI控件都继承自View,在开始介绍View的基本属性之前,先学习一下Android是如何添加一个视图控件的。 在iOS中往某个界面上添加一个控件有两种方式: 1.使用xib或者storyboard,往可视化界面上拖一个控件(比如UIlabel,然后设置好frame和内容...

2018-09-16 23:18:14

阅读数 218

评论数 0

提示
确定要删除当前文章?
取消 删除