- 博客(38)
- 资源 (30)
- 收藏
- 关注
原创 多线程
GCD常用函数 GCD的队列 sync与async不能影响任务是串行还是并发执行,只能决定是在当前主线程中执行,还是子线程中执行,主要影响是能不能开启新的线程. 而队列的类型,决定了任务的执行方式(并发,串行),队列不能决定开启线程,队列只能决定任务是一个一个执行,还是多个同时执行 各种队列的执行效果 只要是sync或者是主队列,就意味着不会开启新线程,而且是串行执行...
2018-07-29 19:59:04 153
原创 Runtime-API
动态创建一个类 修改uitextField的占位字的颜色 方法二:窥探哪个UI控件里面的有哪些东西,可以通过这个方法获取,设置的时候可以用不一样的办法设置 找UITextField内部有哪些成员变量,记查看私有的成员变量 如何访问成员变量_placeholderlabel 用KVC获取 或者 数字不能直接转成对象类型的,首先...
2018-07-28 22:39:32 378
原创 Objc_msgSend
OC的方法调用:消息机制,给方法调用者发送消息 消息发送 动态方法解析 要注意: 消息转发 将消息转发给别人 元类对象的消息转发 super 调用super的结论: super调用的消息接收者仍然是子类对象,只不过是从父类的类对象开始去搜索方法. class方法的底层实现是object_getClass(s...
2018-07-27 17:20:43 722
原创 Class的结构
看到bits &FAST_DATA_MASK,说明bits里面存储了很多有用的信息,要取出其中的class_rw_t结构,要&FAST_DATA_MASK才可以取出 一开始bits 是指向class_ro_t的,后来重新创建了一个class_rw_t 再讲rw设置为我们的data,所以最近bits取出来是指向class_rw_t,而class_rw_t里面的ro...
2018-07-27 11:40:52 279
原创 isa详解
在arm64之前isa就是普通的指针,只存储类对象,元类对象的指针,但是arm64之后,isa做了优化,采取了共用体结构,将一个64位的内存数据分开存储了很多东西,其中33位用来存储地址值...
2018-07-27 08:32:24 1522
原创 位域及枚举位运算实例应用
Runtime:运行时做些操作 struct { // 位域 : uintptr_t nonpointer : 1; //用二进制的一位来代表这个信息 uintptr_t has_assoc : 1; uintptr_t has_cxx_dtor : 1; uintptr_t shiftcls ...
2018-07-26 16:06:25 446
转载 C指针
一、细说指针 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型、指针所指向的类型、指针的值或者叫指针所指向的内存区、指针本身所占据的内存区。让我们分别说明。先声明几个指针放着做例子: 例一:(1)int*ptr;(2)char*ptr;(3)int**ptr;(4)int(*ptr)[3];(5)in...
2018-07-26 09:14:30 198
原创 Block
auto只能用于局部变量 存储的是height变量的地址值 总结 auto自动变量是可能会销毁的,age这个变量的内存将来可能会消失,将来block里面再访问这个内存就会报错. 但是static一直都会在内存中,虽然test()函数已经执行完了,但是height仍然在内存中,所以block()执行访问height的时候还是可以取内存中最新的值,所以通过指针去...
2018-07-25 20:19:36 168
原创 Block本质
^{ NSLog(@"this is a block!");};block不调用是不会执行的 如何调用block,直接添加()就可以调用了即^{ NSLog(@"this is a block!");}();一般我们都会吧block存起来void返回值block名称,(void)参数为空 void(^block)(void) = ^{ NSLog(@...
2018-07-25 19:14:54 345 2
原创 Category
通过runtime动态添加的struct 源码分析 重新组合方法 分类和类扩展有什么区别 类扩展是编译的时候就已经合并到类里面去了,相等于类扩展的东西一编译的时候就已经存在了,类扩展的作用本来是公开声明的东西放到.m文件中私有化,相等于变成一个私有的声明 而分类是程序运行机制,将分类数据合并到类信息中去. ...
2018-07-25 10:58:01 223
原创 KVC
KVC的全称Key -Value Coding,俗称 “键值编码”,可以通过一个Key来访问某个属性- (void)setValue:(id)value forKeyPath:(NSString *)keyPath;- (void)setValue:(id)value forKey:(NSString *)key;- (id)valueForKeyPath:(NSString *)ke...
2018-07-25 09:49:50 160
原创 KVO
KVO的全称是Key-Value Observing,俗称”兼职监听”,可以用于监听某个对象属性值的改变 self.person1监听到了对象属性值发送变化,self.person2没有监听到对象属性值发生变化.本质是什么 NSKVONotifying_MJPerson是使用Runtime动态创建的一个类,是MJPerson的子类 总结: 这就是为什么self....
2018-07-24 21:20:20 226
原创 Runloop
实例图片延迟显示 // 在NSDefaultRunLoopMode模式下显示图片 怎么让一条线程不死一直执行 模式中有source 则runloop开始转圈 有事件就醒来. 希望在子线程中做事情 在子线程开runloop的时候,一定要添加autoreleasepool,一个runloop是对应一条线程的,自动释放池是针对于当前线程的...
2018-07-24 16:25:01 146
原创 OC对象的本质一
我们平时编写的OC代码,底层实现都是C\C++代码 Xcode新建一个app工程. 终端指向main.m的上一级目录 终端打印 clang -rewrite-objc main.m -o main.cpp clang 是苹果内置的编程语言的编译器前端 -rewrite-objc 重新Objc代码,写为C或者C++代码 -o输出 -o main.cpp输出main.cpp (cpp...
2018-07-24 10:28:13 187
转载 iOS在后台完成申请更多时间
我们知道,到我们程序从前台退到后台(安home)键后,将执行程序的委托方法。// 当应用程序掉到后台时,执行该方法 - (void)applicationDidEnterBackground:(UIApplication *)application { } 假设有这么一种情况: 当我们的应用程序从前台被送到了后台。 这时候,我们的程序将执行委托方法applicationDidEnt...
2018-07-20 17:16:55 689
转载 关联对象AssociatedObject解析
我们在 iOS 开发中经常需要使用分类(Category),为已经存在的类添加属性的需求,但是使用 @property 并不能在分类中正确创建实例变量和存取方法。但是,通过OC的runtime关联对象,也就是Associated Object,可以实现上述需求.使用关联对象为已经存在的类中添加属性. 关联对象的应用,分类中的@property @property可以说是一个OC编程中的”宏...
2018-07-20 12:51:20 286
原创 C语言中的指针概念
一般把数据都放在存储器中,存储器中一个字节称为一个内存单元 不同数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元,每个内存单元都有编号.这个编号也叫地址.就是我们所说的指针.内存单元的指针和内存单元的内容是两个不同的概念.对于一个内存单元来说,单元的地址即为指针,其中存放的数据才是该单元的内容.在C语言中,允许用一个变量来存放指针,这种变量称为指针变量. 因此,一个指针变量...
2018-07-20 11:20:49 8611 1
原创 Runtime的方法交叉(Method Swizzling)检测控制器是否释放
什么是Method Swizzling,为什么要用Method Swizzling Method Swizzling:方法交叉,交换两个方法的实现.为什么要交换两个方法的实现,因为我们无法修改系统的某些方法,通过自己写一个方法,然后利用Runtime的Method Swizzling去交换系统与自定义的方法的实现,这样,调用系统的方法时,其实就是执行我们自定义的方法.执行我们自定义方法就是调用系...
2018-07-19 09:16:42 140
原创 tableViewCell的动画效果及动态高度计算
动画图git效果不是很好 import UIKitclass MyViewController: UIViewController,UITableViewDelegate,UITableViewDataSource { @IBOutlet weak var myTableView: UITableView! override func viewDidLoad() {...
2018-07-18 17:30:36 628
转载 UITextView高度随文字自动增加
代码如下:#define DEVICE_HEIGHT [UIScreen mainScreen].bounds.size.height#import "ViewController.h"@interface ViewController ()<UITextViewDelegate>@property (nonatomic, strong) UITextView *tex...
2018-07-18 11:19:01 986
原创 计算视频流量
码率也可以叫比特率,就是一种音乐每秒播放的数据量,单位用bit表示,也就是二进制位。 bps就是比特率。b就是比特(bit),s就是秒(second),p就是每(per),一个字节相当于8个二进制位。也就是说128bps的4分钟的歌曲的文件大小是这样计算的(128/8)*4*60=3840kB=3.8MB.流量:单位时间内收发的数据包的数量. 1M = 1024KB 流量 (M) = 观看...
2018-07-13 15:51:40 12365
翻译 charles抓包
charles抓包,证书都配置好了,还是无法抓包 通常情况下,打开charles,然后菜单栏选择Proxy -> Mac OS X Proxy 即可,接着所有访问的请求都可以在charles中看到。下面是抓不到请求的原因:是我系统设置了vpn代理导致。 因为CloudSS是使用自动代理配置这个,这样就导致了charles无法抓包(这种情况下可以真机上抓包,...
2018-07-13 10:49:22 948 1
原创 collection中cell选中状态下分享图片的快照snapshot
IconCollectionViewController.swift IconDetailViewController.swift IconCollectionViewCell.swift Icon.swift UIView+Snapshot.swift IconCollectionViewController.swiftimport UIKitprivate...
2018-07-09 17:11:23 265
原创 AVKit录像与播放
import UIKitimport AVFoundationimport AVKitclass SimpleVideoCamController: UIViewController { @IBOutlet var cameraButton:UIButton! let captureSession = AVCaptureSession() var ...
2018-07-06 11:21:50 4675
原创 手势控制相机(缩放,转换前后镜头)拍摄相机中的图片保存至相册
通过向上轻扫来切换前后相机镜头,通过从左向右轻扫来放大,从右向左轻扫来缩写,但按下save时保存至相册 @available(iOS 11.0, *)class SimpleCameraController: UIViewController { var toggleCameraGestureRecognizer = UISwipeGestureRecognizer(...
2018-07-06 10:06:50 1245
原创 QRCodeReader
class QRScannerController: UIViewController { @IBOutlet var messageLabel:UILabel! @IBOutlet var topbar: UIView! var captureSession = AVCaptureSession() var videoPreviewLayer: AV...
2018-07-04 16:27:17 2450
原创 AVAudioPlayer与AVAudioRecorder(录音及播放及定时器计时)
在iOS10上,如果没有使用者允许的话,不能存取麦克风,所以需要在Info.plist中添加NSMicrophoneUsageDescription的key,并告知你的使用者为何你的app需要麦克风import UIKitimport AVFoundationclass RecordProController: UIViewController { private var t...
2018-07-04 14:39:40 1635
转载 修改UISearchBar背景颜色(内外框)
self.noteSearchResultVC = [[NoteSearchResultViewController alloc]init]; self.noteSearchResultVC.mainSearchController = self; self.noteSearchResultVC.noteSearchResultDelegate = self; ...
2018-07-03 15:13:43 2822
转载 将当前图片缩放到指定宽度
import UIKitextension UIImage { /// 将当前图片缩放到指定宽度 /// /// - parameter width: 指定宽度 /// /// - returns: UIImage,如果本身比指定的宽度小,直接返回 func scaleImageToWidth(_ width: CGFloat) -> ...
2018-07-03 11:44:04 324
转载 设定constraint后执行layoutIfNeeded()
通过设置constraint后,在这种情况下,你已经更新了约束值,但iOS 一直没有机会真正更新布局,调用layoutIfNeeded()方法,让这个view参与到布局中import UIKitclass IconListView: UIScrollView { var didSelectItemBlock:((_ index:Int) -> ())? let...
2018-07-03 11:10:42 558
原创 创建及进入新的storyboard
let storyboard = UIStoryboard(name: "Onboarding", bundle: nil) if let walkthroughViewController = storyboard.instantiateViewController(withIdentifier: "WalkthroughViewController") as? Walkth...
2018-07-03 09:19:18 640
转载 animateKeyframes 与 Animation
import UIKitclass ViewController: UIViewController { @IBOutlet weak var fj:UIImageView! @IBOutlet weak var yd1:UIImageView! @IBOutlet weak var yd2:UIImageView! @IBOutlet weak var yd3:U...
2018-07-02 16:26:20 800
原创 UIView的layout方法
public struct CATransform3D { public var m11: CGFloat public var m12: CGFloat public var m13: CGFloat public var m14: CGFloat public var m21: CGFloat public var m22: CGF...
2018-07-02 12:05:04 213
iOS-13.0-13.6-.zip
2020-08-25
iOS11.4在不升级xcode的情况下,在对应版本的真机内进行测试
2018-04-09
iOS11.3在不升级xcode的情况下,在对应版本的真机内进行测试
2018-04-09
iOS11.1(15B87)真机测试包
2017-11-23
Xcode 11.0 (15A372)配置包
2017-10-10
图解网络硬件完整版
2017-02-23
xcode 模拟器调试直接进入沙盒
2016-11-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人