- 博客(57)
- 收藏
- 关注
原创 new、init、initWithFrame、initWithFrame:Style: 的调用顺序
创建对象时候会使用New、init、initWithFrame 来进行创建。
2022-03-04 10:45:16
359
原创 tableViewCell 添加删除功能
模仿微信登录设备管理界面的编辑按钮功能,点击编辑按钮,会在Cell的左侧出现一个删除图标。点击删除图标,Cell的右侧会出现删除按钮。当没有点击编辑按钮时,左滑会出现删除按钮。
2022-02-17 15:52:02
1300
原创 Swift:使用 UIWebView创建 动态背景图
使用 UIWebView 创建动态背景图1. 把 gif 图片拖入到 项目中2. 转化成 Data 数据3. 创建 webView 并加载到 webView 上 出现的问题, Data 数据 需要进行 判断。
2019-07-01 11:50:30
454
原创 NodeJS + WebStorm 中文显示乱码
当使用 WebStorm 运行 NodeJS 代码时, 使用 response.write 有中文的时候,会显示乱码,如下图:server.on('request',function (request, response) { console.log('收到客户端的请求了,请求路径是:' + request.uri) response.write('06-http-res - 周...
2019-06-02 20:22:45
1202
原创 01 - 大O表示法
使用它来估算算法的好坏概念:一般用大O表示法来描述复杂度,它表示的是数据规模n 对应的复杂度。解读:当给了一个形参n, 它的对应复杂度是多少。估算下面方法的复杂度Java 版本public static void test1(int n) { if (n > 10) { System.out.println("n > 10"); } else if if (...
2019-05-03 10:49:58
1280
原创 00-什么是算法
算法是用于解决特定问题的一系列的执行步骤。使用不同算法,解决同一个问题,效率可能相差非常大例如:求第n个斐波那契数(fibonacci number)解释斐波那契数:斐波那契数列的排列是:1,1,2,3,5,8,13,21,34,55,89,144……它后一个数等于前面两个数的和。在这个数列中的数字,就被称为斐波那契数。两种解决思路:递归第 n 项 = (n-1) + ...
2019-05-03 10:33:58
203
原创 MAC 下的 eclipse 输入内容有提示
打开Eclipse后,点击屏幕左上角菜单栏上的 “Eclipse”——“偏好设置”("Preferences")在搜索框中输入 "content assist" 可以看到 搜索出来的内容,找到 Java -> Editor -> Content Assist在这页的最下面,有一个"Auto Activation" -> "Auto activation triggers f...
2019-05-03 10:25:36
347
原创 mac 下 修改 eclipse 中的 UTF-8
1、打开Eclipse后,点击屏幕左上角菜单栏上的“Eclipse”——“偏好设置”(“Preferences”)在搜索框中输入 “work” ,找到 “General” 下的 “workspace” 。在这个页面的最下面,有一个 “Text file encoding” 。在这里修改。修改完毕后,点击"Apply and Close" ,完成。...
2019-05-03 10:13:28
582
原创 Fatal error: Unexpectedly found nil while unwrapping an Optional value
今天重构代码的时候,打算提取一个UIView, UIView 的 Frame 没有动。直接把下面的代码放到了 override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? 中 let headView = MLHeadFirstView(frame: CG...
2019-04-26 10:15:52
3205
原创 Swift 继承父类的 UITableViewDelegate 或 UITableViewDataSource
今天在重构朋友的App,发现它的父类BaseTabViewController 写 UITableViewDelegate 或 UITableViewDataSource 方法的时候,没有在 extension 里面写。导致 在子类想要把 UITableViewDelegate 或 UITableViewDataSource 方法 写在 extension 里面 报错。错误是:Cannot o...
2019-04-26 09:30:09
1240
原创 多线程七:线程同步 - @synchronized
一、定义@synchronized是对mutex递归锁的封装@synchronized(obj)内部会生成obj对应的递归锁,然后进行加锁、解锁操作@synchronized 没有智能提示,因为苹果不推荐使用。注: 源码查看:objc4中的objc-sync.mm文件二、断点看 底层 @synchronized([self class]) { // objc_sync_ent...
2019-04-23 15:24:40
250
原创 03 - 线性表概念
一、概念:数据结构是计算机存储、组织数据的方式分为 3种:线性结构、树形结构、图形结构线性结构:线性表(数组、链表、栈、队列、哈希表)树形结构:二叉树(AVL树、红黑树、B树、堆、Trie、哈夫曼树、并查集)图形结构:邻接矩阵、邻接表二、线性表线性表 是具有n 个相同类型元素的有限序列 (n >= 0)线性表都有一个索引,通过索引来查找你要的元素a1 ...
2019-04-23 15:23:43
331
原创 02 - fib函数的时间复杂度分析
一、大O表示法的细节:大O表示法的作用估算一下程序指令执行的次数。如果较真下,其实并不是指令的执行次数,因为像代码最终要让cpu 执行起来,最终要转成汇编指令。比如 Java 的 System.out.println(“n > 10”) ,最终转成汇编指令的时候,肯定不止一条。但是不管最终多少条汇编指令,加起来还是常数。既然是常数,就是 O(1).二、估算两种fib函数的时间复杂度...
2019-04-23 11:06:17
2970
原创 self、super 和 class、superclass 的组合
一、创建类Person 类:继承至 NSObject 类SubPerson 类:继承至 Person 类Person 类中有一个对象方法 testSubPerson类中实现此方法,并在此方法中写[self class][self superclass][super class][super superclass]外界调用 subPerson 的 test 方法。代码如...
2019-02-28 06:46:11
437
原创 property使用属性 copy
@property (nonatomic, copy) NSArray *data;当使用copy 的时候,set方法里面是:- (void)setData:(NSArray *)data { if (_data != data) { [_data release]; _data = [data copy]; }}// 因为 set方法中 ...
2019-02-09 19:34:22
660
原创 NSArray | NSDictionary + Copy
NSArray *arr1 = [[NSArray alloc] initWithObjects:@"a",@"b", nil]; // 浅拷贝 NSArray *arr2 = [arr1 copy]; // 深拷贝 NSMutableArray *arr3 = [arr1 mutableCopy]; ...
2019-02-09 19:06:34
274
原创 NSString + Copy
拷贝目的: 产生一个副本对象比如桌面上有一个文件夹iOS,iOS文件夹中有一个名字叫做 iOS底层笔记二.docx的文件 .command + C, command + V . 会有一个 iOS底层笔记二的副本.docx 的文件。这两个文件,我可以任意改变其中的一个文件,另一个文件不会受到影响。特点:跟原对象互不影响修改原对象,不会影响副本对象修改副本对象,...
2019-02-09 15:42:20
467
原创 swift- tabbarItem 只有文字,没有图片
这里写自定义目录标题不写图片的代码修改文字的 高度 以及 文字的大小不写图片的代码即不写这两句代码 vc.tabBarItem.image = UIImage(named: imageName)?.withRenderingMode(.alwaysOriginal) vc.tabBarItem.selectedImage = UIImage(named:high...
2019-01-17 17:31:15
998
原创 Tagged Pointer 用在 NSString 上
思考以下2段代码发生了什么事情?有什么区别?/// 数据少- (void)getDispatchAsyncLess { // 全局并发队列 dispatch_queue_t queue = dispatch_get_global_queue(0, 0 ); for (int i = 0; i < 1000; i++) { // 异步任务 ...
2018-12-11 21:26:29
498
原创 Tagged Pointer 含义的解释
一、含义iOS 是在 64bit 开始,引入的 Tagged Pointer 技术用于优化 NSNumber、NSDate、NSString 等 小对象 的存储比如: 小型的 OC 对象,就可能用 Tagged Pointer 来实现在没有使用之前,NSNumber 等对象就是一个普通的OC 对象。需要动态分配内存、维护引用计数等,NSNumber 指针存储的是堆中 NSNumb...
2018-12-10 20:48:36
379
原创 Swift 假数据的写法
struct CellContent { var name: String var isChecked: Bool} var dataArr = Array<CellContent>() /// 假数据 public func setupData() { dataArr.append(CellContent(name: "安全问...
2018-12-03 10:02:53
389
原创 内存讲解:数据段、堆、栈
一、iOS 程序的内存布局从低到高保留代码段(__Text)数据段(__ Data)字符串常量已初始化数据未初始化数据堆(heap):比栈的内存地址小,比数据段的内存地址大栈(stack):内存地址比较大内核区一般只使用 代码段、数据段、堆、栈代码段:编译之后的代码...
2018-11-22 20:11:09
3076
转载 Swift- Charts 图形库 报错 找不到 compactMap 方法
报的错误是 找不到 compactMap 方法。这是因为 最新版本是基于 Swift4.1 。而 Xcode9.1 不支持。可以升级Xcode ,也可以 把 compactMap 方法改成 flatMap
2018-11-20 16:15:36
271
原创 GCD 定时器
比 NSTimer 定时器 更加准时例子:// 队列,主队列,将来 的回调放在哪个队列中dispatch_queue_t queue = dispatch_get_main_queue();// 创建定时器dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);...
2018-11-20 15:42:25
814
原创 NSProxy 一些 使用
一、内容NSProxy 是什么?消息转发机制NSProxy 和 NSObject 的比较解决 CADisplayLink ,NSTimer强引用target引起的无法释放问题。二、NSProxy 含义NSProxy 是跟 NSObject 一样的基类,都遵守<NSObject>协议NSProxy是一个抽象类,必须继承实例化其子类才能使用。NSProxy从类名来看...
2018-11-20 10:22:19
813
原创 内存管理:CADisplayLink、NSTimer、NSProxy 使用注意
CADisplayLink、NSTimer 会对target 产生强引用,如果target 又对他们产生了强引用,那么就会引发循环引用。总结:CADisplayLink 想要返回界面就销毁定时器,可以使用 一个 中间代理NSTimer 则可以使用 block 和 中间代理中间代理 可以使用继承至 NSObject 或 NSProxyNSProxy 是什么?继承至 NSObjec...
2018-11-20 09:54:30
460
转载 IO操作
IO 操作 :又叫 文件操作文件操作分为:从文件中读取内容,例如:视频文件,mp3 文件,文本文件。往文件中写入内容。危险的文件操作是:线程A 从文件中读取内容的同时,线程B 往文件中写入内容。也就是同一时间段即读取文件,又写入文件。这样的操作是 要杜绝的。...
2018-11-19 10:53:54
759
转载 Swift - 导航栏背景色为透明色
需求: 导航栏和HeaderView 使用一个背景图片。解决方案: 让 导航栏 变成透明。override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) // 1、设置导航栏半透明 self.navigationController?...
2018-11-16 16:02:27
2621
原创 atomic 和 nonatomic
一、atomic 一些解释atomic 在 Mac 上经常使用,在 iOS 中不经常使用。atom :原子atomic : 原子性它并不能保证使用属性的过程是线程安全的它只能保证 set 方法 和 get 方法内部 是线程安全的。但是当 你使用属性。给属性 添加一些 内容的时候。就不能保证是线程安全的。比如说 NSArray 对象,给 [NSArray addObject] 这样就不...
2018-11-16 10:42:52
485
原创 多线程六:dispatch_semaphore
一、定义semaphore叫做”信号量”信号量的初始值,可以用来控制线程并发访问的最大数量比如想要有3个线程同时执行任务,信号量的初始值就写3.信号量的初始值为1,代表同时只允许1条线程访问资源,保证线程同步代码:例子:// 线程10、7、6、9、8- (void)test{ // 如果信号量的值 > 0,就让信号量的值减1,然后继续往下执行代码 ...
2018-11-15 09:44:00
266
转载 多线程五:dispatch_Queue
直接使用GCD的串行队列,也是可以实现线程同步的代码:@interface SerialQueueDemo()@property (strong, nonatomic) dispatch_queue_t ticketQueue;@property (strong, nonatomic) dispatch_queue_t moneyQueue;@end@implementation ...
2018-11-14 16:15:32
226
转载 多线程六——加锁方案四:NSLock || NSRecursiveLock || NSCondition
一、NSLockNSLock 是对 pthread_mutex 普通锁的封装。遵守 NSLocking 协议它的两个方法- (BOOL)tryLock;- (BOOL)lockBeforeDate:(NSDate *)limit;(BOOL)lockBeforeDate:(NSDate *)limit;传入一个时间,在这个时间之前如果能等到这把锁放开的话,就给这把锁加锁...
2018-11-14 13:54:18
1074
原创 多线程六——加锁方案三 :pthread_mutex
一、定义mutex叫做”互斥锁”,等待锁的线程会处于休眠状态需要导入头文件#import &amp;lt;pthread.h&amp;gt;
2018-11-13 16:49:15
1430
翻译 Swift:max方法
一、func max(_: T, _: T)Returns the greater of two comparable values.返回比较的两个值中最大的一个Parameters: 参数x: A value to compare.y: Another value to compare.Returns: The greater of x and y.If x is equal to...
2018-11-13 11:30:43
3221
原创 多线程六——加锁方案二 :os_unfair_lock
一、定义os_unfair_lock用于取代不安全的OSSpinLock ,从iOS10开始才支持从底层调用看,等待os_unfair_lock锁的线程会处于休眠状态,并非忙等需要导入头文件#import <os/lock.h>编写代码:死锁:永远拿不到锁只加锁,不解锁 = 死锁...
2018-11-12 10:20:29
2332
原创 多线程六——加锁方案一 : OSSpinLock
一、iOS 中的线程同步方案 -&amp;amp;amp;gt; 加锁OSSpinLock:自旋锁os_unfair_lockpthread_mutexdispatch_semaphoredispatch_queue(DISPATCH_QUEUE_SERIAL)NSLockNSRecursiveLockNSConditionNSConditionLock@synchronized二、OSSp...
2018-11-08 14:04:57
868
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人