block的注意点
1). 在block内部使用外部指针且会造成循环引用情况下,需要用__week修饰外部指针:
__weak typeof(self) weakSelf = self;
2). 在block内部如果调用了延时函数还使用弱指针会取不到该指针,因为已经被销毁了,需要在block内部再将弱指...[2019/2/28]
iOS开发 - OC - PCH文件使用iOS开发 - OC - PCH文件使用
一、 PCH文件的作用
Xcode中,PCH文件在程序编译的时候会自动包含进去。也就是说PCH中的内容是全局的,可以使用在程序的任何地方,通过这个特性,我们可以概括到PCH的作用有以下几个方面:
(1...[2019/2/26]
iOS 多线程:『RunLoop』详尽总结
1. RunLoop 简介1.1 什么是 RunLoop? 可以理解为字面意思:Run 表示运行,Loop 表示循环。结合在一起就是运行的循环的意思。哈哈,我更愿意翻译为『跑圈』。直观理解就像是不停的跑圈。 RunLoop 实际上是一个对象,这个对象在循环中用来处理程序运行过程中出现的各种事件(比如...[2019/2/26]
iOS与H5交互(WKWbebView)
前言:
在iOS开发中,或多或少的会嵌入一些H5页面,有时候需要原生代码和H5页面进行交互。iOS8开始苹果推出性能更强大的WKWebView,所以一下方法是关于WKWebView与JS的交互。
创建WKWebView:
遵守协议
p.p1 { margin: 0.0px 0.0px 0.0...[2019/2/25]
iOS代理模式(delegate)的使用
前言:
代理模式是iOS中非常重要的一个模式,iOS SDK中的系统控件几乎都用到了代理模式。代理模式用来处理事件监听、参数传递功能。
协议创建(Protocol):
可手打如下代码,或者在代码块里面搜索"protocol",然后把协议的代码拖拽出来
p.p1 { margi...[2019/2/22]
iOS学习——#define、const、typedef的区别
在iOS开发中经常遇到一些字段和类型的定义,例如配置生产和测试不同环境的参数等,这时候经常用到#define、const以及typedef。那么它们之间有什么区别呢?我们接下来一个一个具体了解下。一、基本概念1.1、#define #define并不是定义全局变量,而是宏定义。也就是说并不是真...[2019/2/22]
iOS 常用的宏定义
屏幕尺寸
#define kScreenWidth [UIScreen mainScreen].bounds.size.width
#define kScreenHeight [UIScreen mainScreen].bounds.size.height
手机型号
#defi...[2019/2/22]
OC 知识:Foundation 框架及相关类详尽总结
本文用来介绍Foundation框架的相关知识,以及Foundation框架所提供类的相关知识总结。
1. 框架介绍
框架是由很多类、方法、函数和文档按照一定的逻辑组织起来的集合,以使开发程序变得更加容易。在OS X系统下有100多个框架,这些框架可以用来开发应用程...[2019/2/21]
iOS 开发者必不可少的 75 个工具
如果你去到一位熟练的木匠的工作室,你总是能发现他/她有一堆工具来完成不同的任务。 软件开发同样如此。你可以从软件开发者如何使用工具中看出他水准如何。有经验的开发者精于使用工具。对你目前所使用的工具不断研究,同时了解一些替代品的使用,当你目前所用的工具无法满足你的需要时可以填补空缺。 记住了这些,我...[2019/2/21]
OC 知识:彻底理解 iOS 内存管理(MRC、ARC)
1. 什么是内存管理
程序在运行的过程中通常通过以下行为,来增加程序的的内存占用
创建一个OC对象
定义一个变量
调用一个函数或者方法
而一个移动设备的内存是有限的,每个软件所能占用的内存也是有限的
当程序所占用的内存较多时,系统就会发出内存警告,这时就得...[2019/2/21]
ios宏定义学习ios宏定义学习
宏简介:
宏是一种批量处理的称谓。一般说来,宏是一种规则或模式,或称语法替换 ,用于说明某一特定输入(通常是字符串)如何根据预定义的规则转换成对应的输出(通常也是字符串)。这种替换在预编译时进行,称作宏展开。编译器会在编译前扫描代码,如果遇到我们已经定义好的宏那么就会进行代码替换,宏只会在内...[2019/2/19]
常用在线软件获取
1、学习工作相关
1.1 Windows
图片压缩Tinyjpg:解决应用图片资源过大的问题,可以先将图片进行码转换,可以有效降低资源占用率。
清华大学镜像源
MSDN微软系统下载
1.2 Apple
iPhone支持SDK(Xcode调制专用)
链接:https: pan.baidu.c...[2019/2/18]
GCD死锁,及同步、异步、串行和并行队列组合情形
一、概述
1)队列用来存储代码任务,线程用来运行代码任务;
2)main()函数作为程序入口,整个程序默认运行在主线程中,程序代码任务默认存放在主队列中;
3)以下所谓阻塞线程是针对主线程而言(子线程阻塞在所不问,自己手动管理);队列阻塞主要是针对主队列(子队列阻塞在所不问,自...[2019/2/15]
iOS----------时间戳与NSDate
1:时间戳转NSDate
NSString *timeStamp =@"1545965436";
NSDate *date = [NSDate dateWithTimeIntervalSince1970:[timeStamp intValue]];
...[2019/2/13]
UITapGestureRecognizer 的用法(轻触手势识别器)UITapGestureRecognizer 的用法(轻触手势识别器)
最近在项目中用到了手势操作,键盘回收时还是挺常用的,现在总结下,多谢网络上大神们的分享。
先分享下我在项目中用的代码:
UITapGestureRecognizer * mytap=[[UITapGestureRecognizer alloc]initWithTarget:self a...[2019/2/11]
UIScrollView属性及其代理方法
一、UIScrollView是什么?
1、UIScrollView是滚动的view,UIView本身不能滚动,子类UIScrollview拓展了滚动方面的功能。
2、UIScrollView是所有滚动视图的基类。以后的UITableView,UITextView等视图都是继承于该类。
使...[2019/2/11]
UITableView 基本使用方法总结
1.、首先,Controller需要实现两个 delegate ,分别是 UITableViewDelegate 和 UITableViewDataSource2、然后 UITableView对象的 delegate要设置为 self。3、 然后就可以实现这些d...[2019/2/1]
断言NSAssert的使用
1. NSA ert
断言(NSA ert)是一个宏,在开发过程中使用NSA ert可以及时发现程序中的问题。
NSA ert声明如下:
#define NSA ert(condition, desc, ...)
condition:条件表达式。条件成立时,运行后面程序...[2019/1/31]
iOS与硬件通讯(socket,data拼接,发送指令)
最近项目中用到了iPad驱动硬件来工作,也就是智能硬件的实现。下面简单说下原理,详细说下socket,wifi通信,数据处理接收,发送,以及数据解析代码。 首先,来说下通信。因为硬件部件比较多,我们采取的是,iPad与主控板进行交换数据,主控板来与各硬件部件进行通信。看图: &nbs...[2019/1/29]
iOS在framework中使用CoreData出现崩溃问题及解决方法
公司项目中有一个功能,保存授权令牌数据。最开始只有一条数据,所以就直接保存在了userdefaults中。后来需要两条数据,还是保存在userdefaults中,其中一条为固定的,另一条不固定可以进行替换或删除。最近又需要保存多条数据,那么usedefaults就不适合了,就考虑使用数据库。iOS...[2019/1/28]
iOS:WKWebView(19-01-25更)
以前用得不多,先开一篇,以后有遇到再补充。
1、JS 调用 OC
1-1)、添加 和 JS 约定的消息名
[self.userContentController addScriptMe ageHandler:self name:@"约定的消息名"];
...[2019/1/28]
iOS渐变导航栏封装
由于最近开发的几个项目都有渐变导航栏,每次写的时候都要copy一堆关于导航渐变相关的代码,显得类很冗余,所以花了点时间封装了一个渐变类,直接继承就可以满足大部分需求啦,这里简单写一下心路历程:
渐变的核心几个部分:
1.状态栏的变色:
添加一个状态栏属性BooL变量
@property(n...[2019/1/28]
iOS实现图片水印与简单封装示例代码
前言:
常用的许多软件中图片加水印的功能是非常常见的,如微博,微信,今日头条等等图片上都会有。
首先我们了解一下什么是水印及其作用?
水印:在图片上加的防止他人盗图的半透明logo、文字、图标
水印的作用:告诉你这个图片从哪来的,主要是一些网站为了版权问题、广告而添加的。
...[2019/1/28]
ios基础教程之常见的数组使用方法
一、数组的简单介绍
1.数组是一个对象,是任意类型对象地址的集合,OC的数组可以存储不同类型的对象
2.OC的数组只能存储对象,不能存放 简单的数据类型(int, float, NSInteger…)除非通过一些手段把简单数据类型变成对象。在C语言中的数组可以保存任意类型的数据。
3....[2019/1/28]
iOS10--消息通知的基本使用
官方将通知单独放在了UserNotifications.framework,使用时需要导入框架。UserNotifications.framework主要类文件:
UNCalendarNotificationTrigger
UNLocationNotificationTrigger
U...[2019/1/25]
css隐藏移动端滚动条并且ios上平滑滚动的方法_CSS教程_CSS
c 隐藏移动端滚动条并且ios上平滑滚动的方法
HTML代码如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8&qu...[2019/1/25]
笔记:沙盒文件的创建(我懒,偷偷复制过来的,无奈脸。。。。)笔记:沙盒文件的创建(我懒,偷偷复制过来的,无奈脸。。。。)
首先,先总结一下如何获取Documents目录,在ios开发中,我们经常需要检索Documents目录的完整路径以便读取和写入文件,我总结了以下两种方法:
1、NSString *documentsDirectory = [NSHomeDirectory() stringByAppend...[2019/1/23]
笔记:iOS字符串的各种用法(字符串插入、字符串覆盖、字符串截取、分割字符串)(别人的代码直接复制过来的,我脸皮有点厚)
NSString* str=@"hello"; 存在代码区,不可变
NSLog(@"%@",str);
1.【字符串插入】
NSMutableString* str1=[[NSMutableStringalloc]initWit...[2019/1/22]
Swift构造
构造就是将结构体、类或枚举的实例准备好以便使用的过程。这个过程包括:
(1)为实例中的每个存储属性设置初始值。
(2)执行必要的准备和初始化工作。
实例的构造过程是通过构造器来完成的。
可以在结构体、类或枚举中提供自定义的构造器,从而自定义实例的构造过程。
结构体的自定义构造器的基本用法
...[2019/1/21]
block本质探寻八之循环引用
说明:阅读本文,请参照之前的block文章加以理解;
一、循环引用的本质
代码——ARC环境
void test1()
{
Person *per = [[Person alloc] init];
per.age = 10;
...[2019/1/21]
.gitignore中添加的某个忽略文件并不生效.gitignore中添加的某个忽略文件并不生效
最近项目中,来了一新同事,协同开发的过程中,发现老是提示pod install,于是照做了,做完项目可以跑成功但发现提示我跟同事一样的问题,Podfile.lock文件需要提交,于是便提交了,然而同事拉取了我的提交日志以后便和我报了一模一样的错,需要pod install或者update一下,...[2019/1/18]
block本质探寻七之内存管理
说明:
<1>阅读本问,请参照block前述文章加以理解;
<2>环境:ARC;
<3>变量类型:基本数据类型或者对象类型的auto局部变量;
一、三种情形
代码
void test1()
{
int num = 10;
...[2019/1/18]
ios实现fastlane自动化打包
终于抽出时间来学习自动化打包了,app在测试阶段一天总会经历好几次的打包,每次打包真是身心疲惫,刚打完的包说不定就被测试妹子反应还要微调什么地方,我就真的有气没法出,打一次包怎么也得浪费十几分钟,还不能改动自己的项目,一个上午或者下午发现很快就过去了,真的很是憋屈。下面就讲述自己的项目用自动化打包...[2019/1/17]
block本质探寻六之修改变量block本质探寻六之修改变量
说明:
<1>阅读本文章,请参照前面的block文章加以理解;
<2>本文的变量指的是auto类型的局部变量(包括实例对象);
<3>ARC和MRC两种模式均适用;
一、无法修改的原因
代码
很明显,强行给age赋值会报...[2019/1/17]
笔记:long、longlong、int、float、NSString相互转换
NSString *string = @"123";
1.字符串转int
int intString = [string intValue];
2.int转字符串
NSString *stringInt = [NSString stringWithFormat:@"%d",intSt...[2019/1/17]
Swift 产生 uuid
项目中、需要客户端生成一个唯一的识别码
let uuid = UUID().uuidString
print(uuid)
原文链接:http: www.cnblogs.com/jukaiit/p/10277820.html[2019/1/17]
Swift中 删除Array的元素对象Swift中 删除Array的元素对象
Swift中Array的删除对象
在Swift中数组Array没有removeObject的方法
1、找到下标
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #000000; background-color:...[2019/1/16]
block本质探寻五之atuto类型局部实例对象block本质探寻五之atuto类型局部实例对象
说明:阅读本文章,请参考之前的block文章加以理解;
一、栈区block分析
代码
ARC
void test1()
{
{
Person *per = [[Person alloc] init];
per.age = 10;
...[2019/1/16]
BAT面试总结——iOS开发高级工程师
序言
之前也面试别人,现在轮到自己找工作,怎么说呢,现在轮到自己出去面试,怎么说呢,其实还是挺紧张的,原以为自己不会因此紧张或者焦虑,实际上,还是有的,在没找到合适的工作的时候,甚至晚上有点睡不着觉,总觉着有什么事压在心头,睡觉都不安心。既然睡不着,那还是看看资料吧,我有个习惯,睡前看点问题,第二...[2019/1/16]
block本质探寻四之copy
说明:
<1>阅读本文,最好阅读之前的block文章加以理解;
<2>本文内容:三种block类型的copy情况(MRC)、是否深拷贝、错误copy;
一、MRC模式下,三种block类型的copy情况
代码
void test1(...[2019/1/15]
presentedViewController 和 presentingViewController 以及 dismissViewControllerAnimated 的使用
在日常的开发中,多控制器之间的跳转除了使用push的方式,还可以使用 present的方式,present控制器时,就避免不了使用 presentedViewController、presentingViewController ,这两个概念容易混淆,简单介绍一下。
1:present 控制器的...[2019/1/15]
NavigationController
实际开发中都是多控制器的;用一个控制器(父)管理多个控制器(子)
ios提供2个特殊的(父)控制器
UINavigationControler
简介
导航控制器,可以轻松完成多个控制器之间的切换,其结构包含导航条(y=20)、栈顶控制器的view、导航控制器的view。导航控制器需...[2019/1/15]
谈谈iOS获取调用链
iOS开发过程中难免会遇到卡顿等性能问题或者死锁之类的问题,此时如果有调用堆栈将对解决问题很有帮助。那么在应用中如何来实时获取函数的调用堆栈呢?本文参考了网上的一些博文,讲述了使用mach thread的方式来获取调用栈的步骤,其中会同步讲述到栈帧的基本概念,并且通过对一个demo的汇编代码的讲解...[2019/1/15]
关于NSStringFromClass的一点见解
今天做项目的时候遇到一个需求,就是子view视图弹出时,屏蔽掉父view的所有手势,然后想到用
UIGestureRecognizerDelegate代理方法,中间省一些文字(无奈脸),言归正传,NSStringFromCla 其实是用来判断类型的,看代码
MyModel *model=[M...[2019/1/14]
UITableView编辑模式大全解
1、UITableView 的编辑模式
进入编辑模式
代码体现
设置 editing 属性
tableView?.editing = true
这个设置的时候是有动画效果的
tableView.setEditing(true, animated: true...[2019/1/14]
iOS 多线程:『GCD』详尽总结
本文用来介绍 iOS 多线程中 GCD 的相关知识以及使用方法。这大概是史上最详细、清晰的关于 GCD 的详细讲解+总结的文章了。通过本文,您将了解到:
1. GCD 简介
2. GCD 任务和队列
3. GCD 的使用步骤
4. GCD 的基本使用(6种不同组合区别)
5. GCD...[2019/1/11]
block本质探寻三之block类型
一、oc代码
提示:看本文章之前,最好按顺序来看;
代码
void test1()
{
int age = 10;
void(^block1)(void) = ^{
NSLog(@"block1----");
};
...[2019/1/11]
block本质探寻一之内存结构
一、代码——命令行模式
main.m
#import <Foundation/Foundation.h>
struct __block_impl {
void *isa;
int Flags;
int Reserv...[2019/1/10]
block本质探寻二之变量捕获
一、代码
说明:本文章须结合文章《block本质探寻一之内存结构》和《cla 和object_getCla 方法区别》加以理解;
main.m
#import <Foundation/Foundation.h>
int a = 10;
static int b ...[2019/1/10]