![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ios平台
文章平均质量分 63
zhz459880251
这个作者很懒,什么都没留下…
展开
-
Universal Links 接入指南
如果你的app支持了Universal Links, iOS用户点击你网站的链接可以直接打开已经安装的app, 而不用通过打开Safari, 如果你的app没有安装那么点击链接是通过Safari打开你的网站,Universal Links为您提供了一些自定义Scheme方案无法获得的关键优势, 主要包括:独特: 与自定义Scheme方案不同,其他应用无法声明通用链接,因为通用链接使用的是指向...原创 2019-10-12 19:02:29 · 10527 阅读 · 2 评论 -
NSString和block的属性时copy,而不用retain 而容器类使用retain
NSString 为什么要使用copy,而不是retain1、首先如果使用retain,只是引用计数+1,并没有生成新的对象,所以效率好2、但是使用copy安全。因为NSString为NSMutableString 的基类,如果将NSMutableString 以retain的形式赋值给NSString后,后续修改NSMutableString会导致NSString内容的变化,这通常不是我们希望转载 2015-10-14 09:38:11 · 1090 阅读 · 4 评论 -
深拷贝,浅拷贝
浅 复 制:在复制操作时,对于被复制的对象的每一层复制都是指针复制。 深 复 制:在复制操作时,对于被复制的对象至少有一层复制是对象复制。 完全复制:在复制操作时,对于被复制的对象的每一层复制都是对象复制。retain:始终是浅复制。引用计数每次加一。返回对象是否可变与被复制的对象保持一致。 copy:对于可变对象为深复制,引用计数不改变; 对于不可变对象是原创 2015-10-14 09:34:33 · 338 阅读 · 0 评论 -
iOS-Block和对象的内存管理(三)
在上一篇文章中,我们讲了很多关于 block 和基础变量的内存管理,接着我们聊聊 block 和对象的内存管理,如 block 经常会碰到的循环引用问题等等。获取对象照例先来段代码轻松下,瞧瞧 block 是怎么获取外部对象的/********************** capturing objects **********************/typedef void (^blk_t)(转载 2016-03-13 17:10:48 · 893 阅读 · 0 评论 -
iOS-Block的实现(一)
block 顾名思义就是代码块,将同一逻辑的代码放在一个块,使代码更简洁紧凑,易于阅读,而且它比函数使用更方便,代码更美观,因而广受开发者欢迎。但同时 block 也是 iOS 开发中坑最多的地方之一,因此有必要了解下 block 的实现原理,知其然,更知其所以然,才能从根本上避免挖坑和踩坑。需要知道的是,block 只是 Objective-C 对闭包的实现,并不是 iOS 独有的概念,在 C++转载 2016-03-13 16:23:07 · 393 阅读 · 0 评论 -
iOS-Block和变量的内存管理(二)
了解了 block的实现,我们接着来聊聊 block 和变量的内存管理。本文将介绍 可写变量 block的内存段 __block变量的内存段等内容 看完本文会对 block 和变量的内存管理有更加清晰的认识。上篇文章举了个例子,在 block 内获取了一个外部的局部变量,可以读取,但无法进行写入的修改操作。在 C 语言中有三种类型的变量,可在 block 内进行读写操作转载 2016-03-13 16:52:23 · 840 阅读 · 0 评论 -
iOS-Block的总结
前言: 前面学习了那么多block的知识, 其实就为了解决项目中的几个问题 1. ARC 与 MRC下__block的区别 2. __block 和 __weak的区别 3. block内嵌的注意事项 4. block使用场景中的block块中, 引用self是否使用__weak或__block1. ARC 与 MRC下__block的区别2. __block 和 __wea原创 2016-03-13 22:55:21 · 1043 阅读 · 0 评论 -
忽略编译警告
有时候 我们使用的第三方库会考虑到兼容问题, 而使用一些废弃的api, 这样在编译的时候就会出现警告, 如果确认代码没问题, 可以加上-w的编译参数, 使得这些文件不产生警告, 使用-w禁止掉所有的编译警告, 使用-Wno-unused-variable只禁止掉未使用的变量的编译警告原创 2016-04-26 10:16:53 · 6476 阅读 · 2 评论 -
iOS-面试题整理
【※】@property中有哪些属性关键字?访问控制组nonatomicatomic内存管理组weakstrongcopy读写组readwritereadonly重命名组gettersetter【※】weak属性需要在dealloc中置nil么?不需要, 使用weak修饰的属性, 会在RC从1变为0的时候自动销毁,并置为nil【※※】@synthesize和@dynamic原创 2016-04-09 19:50:35 · 2721 阅读 · 0 评论 -
本地推送UILocalNotification(整理)
/**本地通知 * 是由本地应用触发的, 基于时间行为的一种通知形式, 例如闹钟定时、待办事项提醒,又或者一个应用在一段时候后不使用通常会提示用户使用此应用等都是本地通知。 * UILocalNotification的属性有 fireDate、timeZone、repeatInterval、repeatCalendar、alertBody、 alertAction、ha原创 2015-12-09 18:47:34 · 551 阅读 · 0 评论 -
iOS-UIKit继承图
很基础的东西, 如果不review还是会忘的!原创 2016-03-30 00:04:09 · 1175 阅读 · 0 评论 -
结合正则 抓取的iOS 第三方
2015-12-07 23:15:28.067 CatchHTMLData[39327:333145] EGOTableViewPullRefresh: 最早的下拉刷新控件。 SVPullToRefresh: 下拉刷新控件。 XHRefreshControl: XHRefreshControl 是一款高扩展性、低耦合度的下拉刷新、上提加载更多的组件。(国人写) CBStoreHouseR原创 2015-12-07 23:16:42 · 1886 阅读 · 0 评论 -
视频 笔记
1. 内存多点 比 频繁的创建内存再销毁 更有利:比如: 一个可重用的视图根据数据可能会显示[1, 15]张图片, 最好的做法是先创建6个ImageView, 然后根据需要隐藏; 而不是频繁的创建再销毁注意: 对象多点没关系, 但是不要频繁的创建销毁2. OC 编程核心思想: 封装 继承 多态3. UIImageView 加载图片 默认是伸缩模式, 图片会变形UIViewContentMode原创 2015-12-27 18:16:08 · 339 阅读 · 0 评论 -
简单的自定义AlertView
UIAlertView 在iOS9.0正式被废弃了, 而UIAlertController只有在iOS8.0才能支持, 做项目时不想就这样简单的一个提示还老是再对系统做判断, 所以就自己仿造UIAlertView自定义了一个ZHZAlertView类 并使用block来进行回调先看效果 接口部分typedef void(^ConfirmBlock)();typedef void(^Cance原创 2015-12-27 20:56:35 · 499 阅读 · 0 评论 -
UIViewController 生命周期
1. initWithNibName:bundle:如果是通过调用initWithNibName:bundle指定nib文件名初始化的话,ViewController会根据此nib来创建View。如果name参数为nil,则ViewController会通过以下两个步骤找到与其关联的nib: 1)如果ViewController的类名以“Controller”结尾,例如ViewController原创 2015-10-09 17:33:38 · 780 阅读 · 0 评论 -
NSTimer及一些补充(CADisplayLink)
简介使用NSTimer能在给一个定的时间后发送一个消息给target 一般NSTimer结合runloop工作, 所以为了能够正确地使用NSTimer, 有必要学习一下NSRunLoop 和 Threading Programming Guide(PS: 大致了解一下就行). 特别注意: run loops maintain strong references to their time翻译 2016-01-11 18:25:12 · 1139 阅读 · 0 评论 -
获取view的controller
//获取view的controller - (UIViewController *)viewController { for (UIView* next = [self superview]; next; next = next.superview) { UIResponder *nextResponder = [next nextResponder];原创 2016-01-03 01:08:59 · 339 阅读 · 0 评论 -
第三方SSKeychain保存用户密码
UDID(-[UIDevice uniqueIdentifier])在iOS7.0被禁用,一般使用UUID来作为设备的唯一标识。 获取到UUID后,如果用NSUserDefaults存储,当程序被卸载后重装时,再获得的UUID和之前就不同了。 使用keychain存储可以保证程序卸载重装时,UUID不变。但当刷机或者升级系统后,UUID还是会改变的。1. keychain的功能 key原创 2016-01-31 18:20:33 · 2048 阅读 · 0 评论 -
截图 iOS
只需要在UIImage的分类中添加一个方法即可//view: 把需要截图的 控件 传进来+ (instancetype)captureWithView:(UIView *)view { //1.开启上下文 UIGraphicsBeginImageContextWithOptions(view.frame.size, NO, 0); //2.将控制器view的layer渲染到上下原创 2015-10-21 15:49:43 · 367 阅读 · 0 评论 -
NSString 与 Class 互转
字符串转对象 Class class = NSClassFromString(self.arr[sender.tag - 100]);对象转字符串 VC.navigationItem.title = NSStringFromClass([VC class]);完整代码- (void)viewDidLoad { [super viewDidLoad]; self.arr =原创 2016-01-07 17:30:22 · 1280 阅读 · 0 评论 -
GCD小结
GCD各种队列的执行效果GCD的2个核心: 任务 队列 并发队列 手动创建的串行队列 主队列 同步(sync) 不会开启新线程 2. 串行执行任务 1.不会开启新线程 2. 串行执行任务 异步(async) 1. 开启新线程 2. 并发执行任务 1. 开启新线程 2. 串行执行任务- 1. 同步异步: 能不能开启线程 1.1 同步: 不能开启新线程, 1.2原创 2016-04-07 11:09:30 · 328 阅读 · 0 评论 -
每年WWDC的英文记录
每年WWDC的英文记录备忘保存每年WWDC的英文记录原创 2015-09-29 15:00:40 · 355 阅读 · 0 评论 -
JavaScript 与 Native交互(包括ReactNative)
一. 概念JavaScriptCore框架 是苹果在iOS7引入的框架,该框架让 Objective-C 和 JavaScript 代码直接的交互变得更加的简单方便。 JavaScriptCore框架 其实就是基于 webkit 中以C/C++实现的JavaScriptCore 的一个包装二. JavaScriptCore框架常用类JSContext: JS运行的环境, ...原创 2018-03-07 14:17:17 · 729 阅读 · 0 评论 -
app内评价 SKStoreReviewController
SKStoreReviewController/** Request StoreKit to ask the user for an app review. This may or may not show any UI. * * Given this may not succussfully present an alert to the user, it is not appro...原创 2018-07-12 16:23:56 · 3243 阅读 · 0 评论 -
Tweak底层实现Cydia Substrate
原来叫Mobile Substrate他是越狱后插件和软件运行的基础依赖包, 提供动态注入的功能, Logos语法底层就是通过Cydia Substrate实现主要由三部分组成: MobileHooker, MoblieLoader, safe mode1. MobileHooker用于hook方法主要用到两个函数: - MSHookMessageEx 主要作用于...原创 2018-07-07 17:33:10 · 3220 阅读 · 0 评论 -
Tweak前期工作
1. 定位目标文件ps方法 ps -e | grep WeChatfind 方法 find name sshd通过ifunBox, 或者ifile等工具, 直接去目录找 AppStore App目录: /var/mobile/Containers/Bundle/Application 系统App, cydia安装的: /Application 开机启动, daemon的配...原创 2018-07-07 17:53:30 · 311 阅读 · 0 评论 -
Class 内部结构
在OC中类, 对象和方法, 都是c结构体struct objc_class { Class _Nonnull isa; //isa Class类型的指针#if !__OBJC2__ Class _Nullable super_class; const char * _Nonnull name; long version; long info; ...原创 2018-07-07 18:51:38 · 279 阅读 · 0 评论 -
Flutter学习三:Dart 函数
Dart函数1. 函数既能赋值给变量, 又能作为参数传递2. 函数声明如果没有显示申明返回值类型时会默认当做dynamic处理3. 对于只包含一个表达式的函数可以使用箭头语法4. 函数的参数有两种类型: 必选 可选4.1. 可选参数:4.1.1. 可选命名参数:4.1.2. 可选位置参数:4.2. 参数的默认值:5. 每个app都有一个顶级函数main()作为入口, 返回值是void, 可选是参数...原创 2018-12-12 22:49:38 · 1414 阅读 · 0 评论 -
Flutter学习一: Dart数据类型
官网地址: https://www.dartlang.org/guides/language/language-tour#built-in-types目录系统内建类型1. Numbers1.1 int1.2 double2. Strings2.1. 合并字符串可以使用 + 操作符2.2. 字符串镶嵌2.3. 创建多行字符串2.4. “raw” string3. Booleans4. Lists...原创 2018-12-09 20:58:00 · 4555 阅读 · 0 评论 -
Flutter学习二: Dart变量修饰符
一, 变量声明note: 变量的声明必须使用 ‘const’, ‘final’, ‘var’ 或者 其他type namea = 123 //error1. var1.1 与swift的var相同, 类型一旦确定, 不能再修改1.2 当var声明一个变量后, Dart在编译时会根据第一次赋值数据的类型来推断其类型,编译结束后其类型就已经被确定 var a = 1000; ...原创 2018-12-10 22:10:58 · 1451 阅读 · 0 评论 -
React及React Native 安装
一 React1. 概念 React 是一个用于构建用户界面的 javascript 库。 React主要用于构建UI,是 MVC 中的 V(视图)。 React 起源于 Facebook 的内部项目,用来架设 Instagram 的网站,并于 2013 年 5 月开源。 React 拥有较高的性能,代码逻辑非常简单。2. 特点高效 −React通过对DOM的模拟,最大限度原创 2018-01-03 16:06:27 · 1005 阅读 · 0 评论 -
单元测试和集成测试
单元测试和集成测试Unit: 单元测试,保证每一个类能够正常工作 UI: UI测试,也叫做集成测试,从业务层的角度保证各个业务可以正常工作。0. 单元测试 准则: 保持测试的单一性 无耦合概念: 在计算机编程中,单元测试(英语:Unit Testing)又称为模块测试, 是针对程序模块的最小单位来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中,一个单元就是单原创 2017-09-15 15:09:16 · 3137 阅读 · 0 评论 -
UIImage 和 UIColor 互转
UIColor -> UIImage/** * 根据颜色和大小获取Image * * @param color 颜色 * @param size 大小 * */+ (UIImage *)imageWithColor:(UIColor *)color size:(CGSize)size{ UIGraphicsBeginImageContextWithOptions(si原创 2015-11-25 13:53:21 · 406 阅读 · 0 评论 -
生成Description
static NSMutableDictionary *modelsDescription = nil;@implementation BaseObject+ (void)load{ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ modelsDescription = [NSMuta原创 2016-08-08 10:28:23 · 454 阅读 · 0 评论 -
iOS常用的宏(整理)--持续更新
获取设备大小//NavBar高度 #define NavigationBar_HEIGHT 44 //获取屏幕 宽度、高度 #define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width) #define SCREEN_HEIGHT ([UIScreen mainScreen].bounds.size.height) 打原创 2015-12-09 18:36:38 · 722 阅读 · 0 评论 -
instancesRespondToSelector与respondsToSelector的区别
instancesRespondToSelector与respondsToSelector的区别大多数时候用到的都是respondsToSelector这方法, 很少用到instancesRespondToSelector, 所以对instancesRespondToSelector了解甚少, 网上爬了下, 做了个总结:instancesRespondToSelector 类方法, 只能写在类原创 2016-10-10 17:30:49 · 344 阅读 · 0 评论 -
数组排序sortedArrayUsingComparator
按年龄大小排序- (NSArray *)sortPersonAge:(NSArray<Person *> *)array{ NSArray *arr = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1,id obj2) { Person *person1 = (Person *)obj1;原创 2016-12-12 22:44:21 · 1052 阅读 · 0 评论 -
Method Swizzling(转载+补充)
Method SwizzlingMethod swizzling 用于改变一个已经存在的 selector 的实现。通过这一技术,我们可以在运行时通过修改类的分发表中selector对应的函数,来修改方法的实现。#import <objc/runtime.h>@implementation UIViewController (Tracking)+ (void)load { static di原创 2016-10-11 13:12:54 · 514 阅读 · 0 评论 -
数据cache
#import <Foundation/Foundation.h>@class User;@interface CacheUtility : NSObject+ (BOOL)archiveUserWithArray:(NSArray<User *> *)array;+ (NSArray<User *> *)unArchiveUserFromCache;+ (BOOL)writeToCacheFi原创 2017-03-02 11:55:58 · 363 阅读 · 0 评论 -
iOS- 响应者链, runtime, runloop
响应者链 响应者链条概念:iOS系统检测到手指触摸(Touch)操作时会将其打包成一个UIEvent对象,并放入当前活动Application的事件队列,单例的UIApplication会从事件队列中取出触摸事件并传递给单例的UIWindow来处理,UIWindow对象首先会使用hitTest:withEvent:方法寻找此次Touch操作初始点所在的视图(View),即需要将触摸事件传递给其处原创 2016-04-04 23:51:45 · 2471 阅读 · 0 评论