- 博客(41)
- 收藏
- 关注
原创 swift中的get/set方法
OC中得get/set 方法,用于获取和设置我们属性的值。而在swift 中get,set被称之为“计算属性”,它用来间接获取/改变其他属性的值set 和get 是针对 计算变量(Calculated property ) 是不可以赋值的 普通的存储变量(storage property)才是可以赋值的 set和get的写法: var _name:String? var name:String?{ get{ return _name;
2022-05-12 10:34:51
5827
原创 cocoapods升级中遇到的问题
不定时更...目录一、brew1、Mac Homebrew命令报错/usr/local/Homebrew/Library/Homebrew/version.rb:368:in `initialize’二、HTTP1、HTTP/2 stream 1 was not closed cleanly before end of the underlying stream一、brew1、Mac Homebrew命令报错/usr/local/Homebrew/Library/Homebr
2022-05-10 12:01:36
897
原创 数组和链表的区别
一、数组数组是最基本的数据结构,所开辟的内存空间是连续的,且内存大小一经确定之后便无法再更改;优点:查找速度快,因为开辟的内存空间是连续的,为什么说是查找速度快?1、因为可以直接通过数组的索引得到对应的数据,2、因为存储数据的内存连续,就算不知道所需要的数据对应的索引,即便从头到尾顺序查找一遍也能快速得到想要的数据。缺点:1、浪费内存,缺乏弹性(不能根据当前实际需求更改大小)。2、增添和删除的效率低。因为数组的大小在一开始就确定,无法更改,在后续想要添加或者删除数据,不能直接
2022-03-11 10:55:08
5083
原创 iOS日常开发之KVC
KVC也就是key-value-coding,即键值编码,通常是用来给某一个对象的属性进行赋值[obj setValue:@"张三" forKey:@"name"];原理:1、寻找对应key的setter方法当调用setValue:forKey:时 ,程序会先通过setter(set:)方法,对属性进行设置;如果没有找到setKey:方法,KVC机制会检查+(BOOL)accessInstanceVariablesDirectly方法重写返回了NO,那么这一步会执行setValuef
2022-03-11 10:44:55
2621
原创 iOS开发之iOS14详解
目录1、project文件命名2、 广告标识符IDFA2.1、iOS13之前2.2、iOS143、相册3.1、iOS13之前3.2、iOS14在 iOS14之前,当用户首次访问APP时,会被要求开放很多权限,如相册、定位、通讯录等,实际上该APP可能只需一个选择图片功能,但却被要求开放整个照片库的权限,这是很不合理的。对于相册,在 iOS14 中引入了 “LimitedPhotos Library” 的概念,用户可以授予应用访问其一部分的照片,对于应用来说,仅能读取到用户选择让应用来读取的照片,让我们看
2021-08-19 16:09:54
777
原创 日常-关于NS_OPTIONS枚举的用法
NS_OPTIONS的作用是对于一个状态可以有多个取值而设计的,比如如果给按钮设置圆角,那么有上下左右4个方向,而你可以只设置左边有圆角,也可以设置左边和右边有圆角,这样就有很多种排列组合。首先定义一个NS_OPTIONS//NS_OPTIONS,定义选项typedef NS_OPTIONS(NSUInteger, ExampleOption) { ExampleOptionNone = 0, //二进制0000,十进制0 ExampleOptionLeft = 1
2021-08-19 16:09:11
517
原创 算法-int各位相加
给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。示例:输入: 38输出: 2 解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位数,所以返回 2。思路:取出数据的每一位,进行相加,直至满足条件。int addDigits(int num){ int sum = 0; while(num > 9){ sum += num%10; num /= 10; } sum +
2020-11-19 10:50:16
2111
原创 算法-移动数组中零的位置
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]方法:从第一个数据开始对比,如果为0,就和后面的数据进行一一对换void moveZeroes(int* nums, int numsSize){ for(int i = 0;i < numsSize - 1;i++) { for (int j = i;j < numsSize - 1;j++
2020-11-19 10:27:43
384
原创 算法-颠倒二进制位
颠倒给定的 32 位无符号整数的二进制位。示例 1:输入: 00000010100101000001111010011100输出: 00111001011110000010100101000000解释: 输入的二进制串 00000010100101000001111010011100 表示无符号整数 43261596, 因此返回 964176192,其二进制表示形式为 00111001011110000010100101000000。示例 2:输入:11111111111111111
2020-11-18 16:19:38
323
1
原创 算法-2的幂
给定一个整数,编写一个函数来判断它是否是 2 的幂次方。示例 1:输入: 1输出: true解释: 2^0 = 1示例 2:输入: 16输出: true解释: 2^4 = 16示例 3:输入: 218输出: false思路2的幂,指转化为二进制时,有且只有一位为1也就是说,当数值转化为二进制表达式的时候,其中数字位数为 ‘1’ 的个数,为1个时为真bool isPowerOfTwo(int n){ //当为0、负数、溢出,为false if (n < 1
2020-11-18 16:12:04
628
原创 算法-无符号整数中位1的个数
编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数示例 1:输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。示例 2:输入:00000000000000000000000010000000输出:1解释:输入的二进制串 00000000000000000000000010000000 中,共有一位为
2020-11-18 16:00:42
669
原创 算法-求数组的子数组之和的最大值
一个一维int数组,这个数组有很多子数组,那么子数组之和的最大值是什么呢?思考 1、题目说的子数组是连续的; 2、题目只需要求和,并不需要返回子数组的具体位置; 3、数组的元素是整数,所以数组可能包含有正整数、零、负整数;举几个例子: 数组:[1, -2, 3, 5, -3, 2]应返回:8 数组:[0, -2, 3, 5, -1, 2]应返回:9 数组:[-9, -2, -3, -5, -3]应返回:-2,这也是最大子数组的和。【解法一】: 直接的方法,记Sum[i,…,
2020-11-18 15:33:10
2027
原创 算法-常见的数组排序算法
目录1、冒泡排序2、选择排序3、直接插入排序4、二分插入排序5、希尔(插入)排序6、快速排序7、堆排序1、冒泡排序冒泡排序原理很容易理解,就是重复地走访过要排序的元素列,依次比较两个相邻的元素,顺序不对就交换,直至没有相邻元素需要交换,也就是排序完成。• 冒泡排序是一种稳定排序算法。• 时间复杂度:最好情况(初始情况就是正序)下是o(n),平均情况是o(n²)void buddleSort(int num[],int count){ for (int i = 0; i < coun
2020-11-18 15:16:24
532
原创 算法-统计质数数量
统计所有小于非负整数 n 的质数的数量。示例 1:输入:n = 10输出:4解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。示例 2:输入:n = 0输出:0什么是质数?除1和本身外都不能整除思路:n=0、1、2时:无质数;n溢出不考虑;从2-n,先去掉2的倍数;然后3的倍数…直到n。int countPrimes(int n){ //判断传入数值,排除负数、0、1、考虑溢出 if(n < 2 || n > INT_MAX
2020-11-18 15:00:26
723
原创 iOS日常开发之property修饰符以及各个修饰符区别
一.@propertyOC的属性(property)是通过用@property定义的公有或者私有的方法。属性(property)提供了一种安全、便捷的方式来与这些属性(attribute)交互,而不需要手动编写一系列的访问方法,如果需要的话可以自定义getter和setter方法来覆盖编译器自动生成的相关方法。尽量多的使用属性(property)而不是实例变量(attribute)因为属性(property)相比实例变量有很多的好处:(1)自动合成getter和setter方法。当声明一个属性(
2020-09-02 17:24:18
472
原创 iOS日常开发之常用代码
目录1、禁止手机睡眠2、隐藏某行cell3、禁用button高亮4、tableview遇到这种报错failed to obtain a cell from its dataSource5、cocoa pods报这个错误:unable to access 'https://github.com/facebook/pop.git/': Operation timed out after 0 milliseconds with 0 out of 0 bytes received6、动画切换window的根控制器7
2020-08-07 10:52:53
1672
原创 iOS日常开发之KVO
1. KVO的使用KVO(Key-Value Observing),也就是我们常说的键值监听,可以用于监听某个对象属性值的改变。KVO使用比较简单,如下所示定义了一个含有2个属性的Student类,然后声明一个实例对象,并添加一个观察者监听某个属性,当被监听的属性发生变化时就会调用观察者的observeValueForKeyPath: ofObject: change: context:方法。当不需要监听的时候需要移除观察者。// Student.h文件@interface Student :
2020-07-24 16:18:52
375
原创 iOS日常开发之面试题集锦(持续更新中...)
目录1、block的本质1.1 block的本质1.2 为什么在默认情况下无法修改被block捕获的变量? __block都做了什么?2、可变集合类 和 不可变集合类的 copy 和 mutablecopy有什么区别?如果是集合是内容复制的话,集合里面的元素也是内容复制么?3、关于nonatomic和atomic3.1 区别3.2 atomic是绝对的线程安全么?为什么?3.3 如果不是,那应该如何实现?3.3.1 使用NSLock实现的锁3.3.2 使用synchronized关键字构建的锁3.3.3 使
2020-07-24 15:50:33
1259
原创 iOS日常开发之设计模式
1、MVCMVC是最普遍认知的设计模式,MVC模式将页面的逻辑分为3块:Model(模型数据业务)、View(UI展示业务)、Controller(协调者-控制器)这样的划分很好理解,维护时,只要找到对应的那一块进行修改就好了。在iOS开发中,UIKIt框架是将控制器Controller与View进行绑定了的,每个控制器都有View对象,代码添加UI子控件细节或者在xib与storyboard中子视图可以直接与controller进行关联,都会导致控制器中难以避免很多本该View去负责的UI..
2020-07-23 17:06:22
149
原创 iOS日常开发之load和initialize的区别
两者都会自动调用父类的,不需要super操作,且仅会调用一次(不包括外部显示调用). load和initialize方法都会在实例化对象之前调用,以main函数为分水岭,前者在main函数之前调用,后者在之后调用。这两个方法会被自动调用,不能手动调用它们。 load和initialize方法都不用显示的调用父类的方法而是自动调用,即使子类没有initialize方法也会调用父类的方法,而load方法则不会调用父类。 load方法通常用来进行Method Swizzle,initia
2020-07-23 17:01:53
415
原创 iOS日常开发之objc在向一个对象发送消息时,发生了什么?
objc在向一个对象发送消息时,发生了什么?根据对象的isa指针找到类对象id,在查询类对象里面的methodLists方法函数列表,如果没有在好到,在沿着superClass,寻找父类,再在父类methodLists方法列表里面查询,最终找到SEL,根据id和SEL确认IMP(指针函数),在发送消息;...
2020-07-23 16:58:25
287
原创 iOS日常开发之nonatomic和atomic
之前面试,面试官提了一个问题,nonatomic和atomic的区别?atomic是绝对的线程安全么?为什么?如果不是,那应该如何实现?nonatomic:表示非原子,不安全,但是效率高。atomic:表示原子行,安全,但是效率低。atomic:不能绝对保证线程的安全,当多线程同时访问的时候,会造成线程不安全。可以使用线程锁来保证线程的安全。...
2020-07-23 16:57:03
247
原创 iOS日常开发之frame和bounds的不同
之前面试,面试官提了一个问题,frame和bounds有什么不同,如果父view的bounds的y=-100,会有什么变化?子view的bounds的y=-100,又有什么变化?frame的size一定等于bounds的size吗?今天我们来详细了解一下1、frame和bounds是一样的吗?当然不是frame 指的是这个view在它superview的坐标系的坐标和大小bounds指这个view在它自己坐标系的坐标和大小,每个新建的view的bounds默认的( x , y ) 都是 (...
2020-07-23 16:55:13
801
原创 iOS日常开发之断言(NSAssert)
断言是指在开发期间使用的、让程序在运行时进行自检的代码(通常是一个子程序或宏)。NSAssert和NSParameterAssert在开发环境中经常被使用,调试和验证代码参数的完整性,断言为真,则表明程序运行正常,断言为假,则意味着它已经在代码中发现了意料之外的错误。一般XCode中的断言在Debug模式默认是开启的,Realse版本中是禁用的。检查是否是debug模式开启断言,release模式关闭,Build Settings中的设置如下:断言的使用NSAssert的简单使用:NS
2020-07-15 11:12:19
1685
原创 iOS开发错误之真机调试错误-Xcode cannot launch XXX on iPhone because the device is locked
真机联调报错:Xcode cannot launch XXXoniPhone because the device is locked解决方法1:锁屏状态可能引发次错误,先开屏,然后运行工程。解决方法2:开屏后仍提示上面错误,(1)退出Xcode(2)拔开设备连接(3)打开xcode项目(4)连接设备(5)build/run...
2020-07-15 10:55:57
2626
转载 iOS日常开发之谓词(NSPredicate)的基本用法(三)
常用谓词说明1、大小判断>=,=>:判断左边表达式的值是否大于或等于右边表达式的值<=,=<:判断右边表达式的值是否小于或等于右边表达式的值>:判断左边表达式的值是否大于右边表达式的值<:判断左边表达式的值是否小于右边表达式的值!=、<>:判断两个表达式是否不相等BETWEEN:BETWEEN表达式必须满足表达式 BETWEEN {下限,上限}的格式,要求该表达式必须大于或等于下限,并小于或等于上限NSNumber *test
2020-07-14 12:52:51
516
转载 iOS日常开发之常用单词、名词注释
Aapplication [ˌæplɪ'keɪʃ(ə)n]应用程式 应用、应用程序application framework['freɪmwɜːk] 应用程式框架、应用框架 应用程序框架architecture['ɑːkɪtektʃə] 架构、系统架构 体系结构argument ['ɑːgjʊm(ə)nt]引数(传给函式的值)parameter 叁数、实质叁数、实叁、自变量array [ə'reɪ] 阵列 数组arrow ['ærəʊ] 箭头operator ['ɔpəreitə] ar
2020-07-14 12:44:02
1629
转载 iOS日常开发之谓词(NSPredicate)的基本用法(二)
在iOS开发中,系统提供了NSPredicate这个类给我们进行一些匹配、筛选操作,非常方便。为了演示,先定义一个person类.h文件#import <Foundation/Foundation.h> @interface Person : NSObject @property (nonatomic, copy) NSString *name;@property (nonatomic, assign) NSInteger age; - (instancetype)i
2020-07-14 12:38:29
504
原创 iOS日常开发之谓词(NSPredicate)的基本用法(一)
Cocoa框架中的NSPredicate用于查询,原理和用法都类似于SQL中的where,作用相当于数据库的过滤取在iOS开发中,系统提供了NSPredicate这个类给我们进行一些匹配、筛选操作,非常方便。最常用到的函数+ (NSPredicate *)predicateWithFormat:(NSString *)predicateFormat, ...;1、比较运算符 > 、< 、== 、 >= 、<= 、 !=例:@"number >= 99"2
2020-07-14 12:29:24
905
转载 iOS 保证线程安全的方式
转载自:https://www.jianshu.com/p/938d68ed832c#一、前言保持线程同步的方式各不相同,有@synchronized、NSLock、dispatch_semaphore、NSCondition、pthread_mutex、OSSpinLock。实现机制各不相同,性能也各不一样。我们平常使用最多的@synchronized是性能最差的。下面我们先分别介绍每个加锁方式的使用,在使用一个案例来对他们进行性能对比。二、介绍与使用2.1、@synchronized
2020-07-14 12:17:23
543
原创 iOS lldb(gdb)常用的调试命令
(命令)和(子命令):LLDB调试命令的名称。命令和子命令按层级结构来排列:一个命令对象为跟随其的子命令对象创建一个上下文,子命令又为其子命令创建一个上下文,依此类推。 2. :执行命令的操作 3. :命令选项 4. :命令的参数 5. []:表示命令是可选的,可以有也可以没有.打印对象po如果我们想打印对象。我们需要使用命令选项:-O。为了更方便的使用,LLDB为expression -O –定义了一个别名:po执行表达式expression执行某个表达式。 我们在代码运行过程中,..
2020-07-13 16:40:23
625
原创 iOS 交换两个变量的值
通常我们的做法是:定义一个新的变量,借助它完成交换。代码如下:int a,b;a=10; b=15;int t;t=a; a=b; b=t;这种算法易于理解,特别适合帮助初学者了解计算机程序的特点,是赋值语句的经典应用。在实际软件开发当中,此算法简单明了,不会产生歧义,便于程序员之间的交流,一般情况下碰到交换变量值的问题,都应采用此算法(以下称为标准算法)。上面的算法最大的缺点就是需要借助一个临时变量。这里我们可以用三种算法来实现:1)算术运算2)指针地址操作3)位运算
2020-07-13 16:31:17
705
转载 iOS 常用数学函数
iOS开发中,常用的c函数,在math.h中绝对值函数1. 取绝对值函数:y = |x| fabs()extern float fabsf(float);extern double fabs(double);extern long double fabsl(long double);取整函数1. 对x进行向上取整 -- ceil()extern float cei...
2019-11-01 09:54:22
810
原创 iOS日常开发之Xcode的缓存清理
Xcode缓存占内存太大,清理一下1、~/Library/Developer/Xcode/DerivedData/这个文件夹中保存的是Xcode的缓存文件,曾经在Xcode跑过的所有项目的索引、build的信息等都会保存在这里。删除后在下次打开项目编译的时候将会重新生成。由于这里包含了大量已经没用的项目的信息又懒得去筛选,于是把整个文件夹删了。2、~/Library/Developer...
2019-10-24 10:27:58
1796
原创 iOS开发之添加阴影效果
今天做项目,用到了添加阴影效果,笔记一下//添加阴影view.layer.masksToBounds = NO;view.layer.shadowOpacity=1;///不透明度view.layer.shadowColor = [UIColor colorWithHex:0x000000].CGColor;//阴影颜色view.layer.shadowOffset = CGS...
2018-10-18 17:47:54
3445
原创 iOS开发之上传AppStore出错记录---ERROR ITMS-90129
错误提示:ERROR ITMS-90129: "The bundle uses a bundle name or display name that is already taken."错误原因:这个项目之前上传过,之后修改过包名,打包装之后包名和上次包名不一样,导致上传失败解决办法:修改包名和之前的一致,就可以了...
2018-09-20 14:45:25
2381
转载 RACSignal的基本方法说明
最近在做关于RACSignal的项目,做一下笔记 //创建一个基本 signal RACSignal *signal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) { [subscriber sendNext:@"1"]; [subscriber sendNex...
2018-09-14 18:13:11
2832
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人