MisakaTao

爆裂吧现实,粉碎吧精神,放逐这个世界!


  • 首页

  • 标签

  • 分类

  • 归档

  • 关于

Category 底层原理研究

发表于 2018-12-03 | 分类于 Category |

Category 的加载处理过程

在这篇博客 iOS 程序 main 函数之前发生了什么 有中提到,_objc_init 这个函数是 runtime 系统的初始化函数,于是我们可以直接从 _objc_init 这个函数开始进行分析, Category 加载过程中的函数调用顺序如下:

1
2
3
4
5
6
7
void _objc_init(void);
└── void map_images(...);
└── void map_images_nolock(...);
└── void _read_images(...);
└── static void addUnattachedCategoryForClass(...);
└── static void remethodizeClass(Class cls);
└── static void attachCategories(Class cls, category_list *cats, bool flush_caches);
阅读全文 »

iOS 开发:KVC 与 KVO

发表于 2018-11-05 | 分类于 iOS |

[TOC]

KVC

Key-Value Coding 基本原则

访问对象属性

1
2
3
4
5
6
7
@interface BankAccount: NSobject

@property (nonatomic) NSNumber *currentBalance; // An attribute
@property (nonatomic) Person *owner; // A to-one relation
@property (nonatomic) NSArray <Transaction *>*transactions; // A to-many relation

@end

currentBalance/owner/transactions 都是 BankAccount 的属性。owner 属性是一个对象,和BankAccount构成一对一的关系,owner对象中的属性改变后并不会影响到owner本身。

为了保持封装,对象通常为其接口上的属性提供访问器方法(accessor methods)。在使用访问器方法时必须在编译之前将属性名称写入代码中。访问器方法的名称成为使用它的代码的静态部分。例如: [myAccount setCurrentBalance:@(100.0)]; 这样缺乏灵活性,KVC提供了使用字符串标识符访问对象属性的更通用的机制。

阅读全文 »

CocoaPods 大全

发表于 2018-10-24 | 分类于 iOS |

[TOC]

一、CocoaPods 简介

CocoaPods 是一个用 Ruby 写的、负责管理iOS项目中第三方开源库的工具,CocoaPods 能让我们集中的、统一管理第三方开源库,为我们节省设置和更新第三方开源库的时间。

二、CocoaPods 安装

下面就正式开始安装 CocoaPods,命令中间可能有空格看不出来,建议直接复制粘贴执行;

因为 Mac 电脑自带 Ruby 环境,我们就只需打开终端开始动手。然而又因为默认情况下我们 MacOS 系统自带的 Ruby 环境版本比较低(大概是 2.0.0 或者其他较高版本),但是现在安装 CocoaPods 需要 2.2.2 版本及以上的,所以我们不管三七二十一先直接先升级 Ruby。

阅读全文 »

Hexo+Github Pages 搭建博客

发表于 2018-10-23 | 分类于 工具 |

搭建个人博客的方法

搭建个人博客,一般有三种方法:

  • Wordpress:70%的网站都采用这个方法,商业化成熟,简单门槛低;
  • 静态网页+博客框架:代表是Github Page+Hexo,有一定的技术门槛,好处是不用VPS,本文会详细介绍此方案;
  • 自己编写一个网站:前后端都自己实现,嗯,门槛高又费时间,不提了。
阅读全文 »

iOS开发 - 地图与定位

发表于 2017-10-23 | 分类于 iOS |

定位

定位功能
  • 定位主要用于获取用户当前地理位置信息。
  • 常用的定位技术:
    GPS定位(全球定位系统:最精准的定位方式);
    Skyhook Wi-Fi定位(Wi-Fi路由器);
    因特网提供商定位技术(提供商中心站);
    多种定位方法混合使用;
  • Core Location是iOS中实现定位功能的框架,提供了大量接口对定位功能进行配置及获取地理位置数据。
  • 使用Core Location需要导入框架:CoreLocation.framework。
  • CoreLocation提供了CLLocationManager类来对定位功能进行管理,包括定位功能的配置、开始、停止定位等。
  • CoreLocation也提供了CLLocationManagerDelegate委托协议来处理CLLocationManager在定位过程中触发的事件。
阅读全文 »

iOS开发:采用URI方式跳转到各类地图进行导航

发表于 2017-06-21 | 分类于 iOS |
  • 最近在做导航,所以把自己找到的资料总结一下!
  • 无论是百度地图、高德地图、谷歌地图还是腾讯地图它们都有自己的SDK,我们只需要在自己的工程中导入SDK并查看相应的官方文档,基本上就可以实现导航。但是这样每个地图的SDK都导入不但麻烦而且占用APP的内存。最关键的是我们上传到AppStore的包文件是有限制的。所以我的原则是能不导入的SDK 就不导入。
  • 还有一种方式就是是以URI跳转的方式(在iOS中就是以URL Scheme的方式),直接跳到对应的地图APP中,直接利用对方的功能来导航。缺点是用户没有安装对应的APP就不能使用其进行导航。 点击导航按钮会出现如下的弹窗, 当然手机上未安装的地图 其名称就不会出现在弹窗上。
阅读全文 »

iOS开发:排序算法在OC中的实现

发表于 2016-11-23 | 分类于 iOS |

目录

  • 选择排序
  • 冒泡排序
  • 插入排序
  • 快速排序
  • 双路快速排序
  • 三路快速排序
  • 堆排序
  • 总结与收获
  • 参考与阅读
阅读全文 »

UIView动画事务

发表于 2016-10-23 | 分类于 iOS |

简介

  • 日常开发中常使用动画,恰当地使用动画有助于提高用户体验。
  • UIView动画事务提供了大量简单的接口来实现种类繁多的动画效果。
  • UIView动画事务多用于执行隐式动画:
    frame:设置视图大小及位置
    bounds:设置视图矩形大小
    center:设置视图中心点位置
    transform:设置视图的纺射变幻属性(缩放、旋转)
    alpha:设置视图的透明度
    
    阅读全文 »

UI 界面传值

发表于 2016-08-21 | 分类于 iOS |

传值需求

  • 将用户信息 userInfo 作为传值对象进行传递。

场景一 主页传值到详情页

  • 现在模拟传递用户名:userName。
属性传值
  1. 属性传值一般用于从主页传值到详情页。
  2. 传值步骤:
阅读全文 »

UI 触摸与手势

发表于 2016-08-13 | 分类于 iOS |

触摸(UITouch)

  • UITouch方法
1
2
3
4
5
6
7
8
9
10
11
// 触摸开始
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;

// 触摸移动
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;

// 触摸结束
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;

// 触摸取消
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;
阅读全文 »

ShengtaoLiu

Write the Code, Change the World.

10 日志
3 分类
9 标签
GitHub E-Mail 简书 掘金
© 2019 ShengtaoLiu
由 Hexo 强力驱动
|
主题 — NexT.Gemini v5.1.4