0%

runtime 基础知识

runtime是运行时,在运行的时候做一些事请,可以动态添加类和交换函数,那么有一个基础知识需要了解,arm64架构前,isa指针是普通指针,存储class和meta-class对象的内存地址,从arm64架构开始,对isa进行了优化,变成了一个union共用体,还是用位域来存储更多的信息,我们首先看一下isa指针的结构:

阅读全文 »

本章讲解block的用法和底层数据结构,以及使用过程中需要注意的点。

block本质

前几篇文章讲过了,class是对象,元类也是对象,本质是结构体,那么block是否也是如此呢?block具有这几个特点:/

  • block本质上也是一个OC对象,它内部也有isa指针
  • block是封装了函数调用以及函数调用环境的oc对象

先简单来看一下block编译之后的样子

1
2
3
4
5
6
7
8
9
10
int main(int argc, const char * argv[]) {
@autoreleasepool {
void (^block)(void) = ^(void){
NSLog(@"hello word");
};
block();

}
return 0;
}
阅读全文 »

今天我们再看一下Category的底层原理。
先看一下Category的简单使用,首先新增一个类的Category,然后添加需要的函数,然后在使用的文件中导入就可以直接使用了。代码如下:

阅读全文 »

我们知道实例实际是存储了成员变量的值和指向类的isa指针,class对象和meta-class对象包含 isasuperclassclass_rw_t这几种结构体,只是数据不一样,isa需要ISA_MASK&之后才是真正的值。那么今天我们在看一下Key-Value Observing的本质。

KVO本质

首先需要了解KVO基本使用,KVO的全称 Key-Value Observing,俗称“键值监听”,可以用于监听某个对象属性值的改变。下面我们展示一下KVO的基本使用。

阅读全文 »

底层原理 类的本质

复习一下IOS 底层原理 对象的本质–(1),可以看出来实例对象实际是上结构体,那么这个结构体是有类指针和成员变量组成的。

1
2
3
4
5
6
7
8
9
10
11
//Person
@interface Person : NSObject
{
@public
int _age;//4bytes
int _level;//4bytes
int _code;//4bytes
}
@end
@implementation Person
@end
阅读全文 »

对象的本质

探寻OC对象的本质,我们平时编写的Objective-C代码,底层实现其实都是C\C++代码。
那么一个OC对象占用多少内存呢?看完这篇文章你将了解OC/对象的内存布局和内存分配机制。

使用的代码下载
要用的工具:

首先我们使用最基本的代码验证对象是什么?

阅读全文 »

之前使用的fastlane添加pgyer自动打包的,最近发现更新总是有问题,所以产生了自己shell做一个的想法。虽然代码比较少,但是很实用。

  • 打包
  • 导出ipa
  • 上传pgyer

打包自动上传pgyer

阅读全文 »

指针函数和函数指针

顾名思义,指针函数即返回指针的函数。其一般定义形式如下:

1
类型名 *函数名(函数参数表列);

其中,后缀运算符括号“()”表示这是一个函数,其前缀运算符星号“*”表示此函数为指针型函数,其函数值为指针,即它带回来的值的类型为指针,当调用这个函数后,将得到一个“指向返回值为…的指针(地址),“类型名”表示函数返回的指针指向的类型”。

“(函数参数表列)”中的括号为函数调用运算符,在调用语句中,即使函数不带参数,其参数表的一对括号也不能省略。其示例如下:

阅读全文 »

1.蓝图
2.Nav的使用
3.mysql使用
4.模板的使用

蓝图使用

新建user文件夹,在user文件夹下变新建tamplates,还有init.py和views.py
init.py

阅读全文 »

1.安装Flask
2.安装bootstrap
3.HelloWord

安装Flask

我用的py3,所以安装命令是:
pip3 install Flask,安装之后,在Pycharm里边看到是这样子的,
py3第三方库列表

阅读全文 »