- 博客(237)
- 资源 (1)
- 收藏
- 关注
原创 iOS —— use_frameworks! 作用
通过cocoapods管理应用程序时,在Podfile文件中,**use_frameworks!*cocoapods会生成对应的 frameworks 文件 在Link Binary With Libraries:会生成Pods_工程名.framework,包含了其它用cocoapods导入的第三方框架的.framework文件1、纯OC项目中,通过cocoapods导入OC库时,一般都不使用use_frameworks!2、纯swift项目中,通过cocoapods导入swift库时,必须使用u...
2022-07-12 17:33:07
1453
1
原创 pod install VS pod update
pod install:根据Podfile、Podfile.lock和当前已经安装的Pod情况(即Pods目录下的Pod库),来决定安装、删除或更新一些Pod库install结束后,会将安装的pod库以及所有直接、间接依赖的pod库写入Podfile.lock中一、pod install不更新pod假设创建一个新工程,Podfile中引入库A,写法是pod A, '1.0',执行pod install 完成后,Podfile.lock中库A的版本就是是1.0了。现在我们修改Podfile中A的
2022-02-17 14:25:55
2352
原创 iOS—— Class 、object_getClass、objc_getClass区别
1、class 方法class 方法无论是类对象还是实例对象都可以调用,可以嵌套,返回永远是自身的类对象。如:Person *p = [[Person alloc]init];Class *pClass == [p class] == [ [p class]class] == [[ [p class]class]class] == [Person class]2、object_getClass 方法Class object_getClass(id obj){ if (obj)
2021-06-24 16:15:03
831
原创 iOS——获取数组模型中某个属性的值
Persion * p1 = [[Persion alloc]init]; p1.name = @"哈哈"; p1.age = 12; p1.num = 42; Persion * p2 = [[Persion alloc]init]; p2.name = @"嘿嘿"; p2.age = 24; p2.num = 4219; Persion * p3 = [[Persion alloc]init]; p3....
2021-02-20 11:14:41
2861
1
原创 iOS——四周阴影
UIView * bgView = [[UIView alloc]init]; bgView.backgroundColor = [UIColor whiteColor]; bgView.frame = CGRectMake(100, 100, 100, 100); bgView.layer.shadowColor = [UIColor grayColor].CGColor; bgView.layer.shadowOffset = CGSizeZero; // 设置偏移量为.
2021-02-19 16:03:26
503
原创 Swift——指针
Swift中也有专门的指针类型,这些都被定性为"Unsafe"(不安全的)MemoryLayout 获取数据类型占用内存的大小 enum MemoryLayout<T> { static var size: Int { get } // 实际占用的内存大小 static var stride: Int { get } // 分配的内存大小 static var alignment: Int { get } // 内存对齐参数 s.
2020-11-27 16:03:43
164
原创 Swift——内存管理
跟OC一样,Swift也是采取基于引用计数的ARC内存管理文案(针对堆空间)Swift的ARC中有3种引用:强引用:默认情况下,引用都是强引用弱引用:通过weak定义弱引用 必须是可选类型的var,因为实例销毁后,ARC会自动将弱引用设置为nil ARC自动给弱引用设置nil时,不会触发属性观察器。无主引用:通过unowned定义无主引用 不会产生强引用,实例销毁后仍然存储着实例的内存地址(类似于O...
2020-11-27 10:30:12
149
原创 Objc-Swift混编(更新中)
一、OC项目1、当我们在 ObjC 项目时,新建 Swift 文件时,Xcode 都会自动帮你新建一个 Objective-C bridging header file(当然我们也可以手动创建)2、Swift中调用OC 我们可以Objective-C bridging header file导入ObjC头文件, 这样我们就能在 Swift 中调用 ObjC 的代码了。3、OC调用Swift 引入 项目名称-Swift.h 头文件即可 ,例如(#import "ObjcDemo-Swift.h")..
2020-11-23 11:37:39
278
原创 Swift——继承
值类型(枚举、结构体) 不支持继承、只有类支持继承 。子类可以重写父类的下标、方法、属性,重写必须加上override关键字被final 修饰的方法、下标、属性 ,禁止被重写被final 修饰的类,禁止被继承一、重写属性1、子类可以将父类的属性(存储、计算)重写为计算属性2、子类不可以将父类属性重写为存储属性3、只能重写var属性,不能重写let属性4、重写时,属性名、类型要一致5、子类重写后的属性权限不能小于父类属性的权限 如果父类属性是只读的,那...
2020-11-20 17:20:40
884
原创 Swift ——值类型、引用类型
值类型值类型赋值给var、let 或者函数传参,是直接将所有内容拷贝一份类似于对文件进行copy、paste操作,产生了全新的文件副本,属于深拷贝(deep copy)在Swift标准库中,为了提升性能,String、Array 、Dictionary 、Set采取了Copy On Write的技术比如仅当有『写』操作时,才会真正执行拷贝操作。对于标准库值类型的赋值操作,Swift能确保最佳性能,所有没必要为了保证最佳性能来避免赋值建议:不需要修改的,尽量定义成let...
2020-11-20 14:34:09
154
原创 iOS——Objective-C 异常机制(@try @catch)
Objective-C 异常机制 :-- 作用 : 开发者将引发异常的代码放在 @try 代码块中, 程序出现异常 使用 @catch 代码块进行捕捉;-- 每个代码块作用 : @try 代码块存放可能出现异常的代码, @catch 代码块 异常处理逻辑, @finally 代码块回收资源;try{ //..执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容}catch(){ //...除非try里面执行代码发生了异常,否则这里的代码不
2020-11-16 16:09:24
507
原创 iOS——内存监控(Memory)
内存是有限且系统共享的资源,一个程序占用越多,系统和其他程序所能用的就越少。程序启动前都需要先加载到内存中,并且在程序运行过程中的数据操作也会占用一定的内存资源。减少内存占用也能同时减少其对 CPU 时间维度上的消耗,从而使不仅使 App 以及整个系统也都能表现的更好。MacOS 和 iOS 都采用了虚拟内存技术来突破物理内存的大小限制,每个进程都有一段由多个大小相同的页(Page)所构成的逻辑地址空间。处理器和内存管理单元(MMU,Memory Management Unit)维护着由逻辑地址到物理地
2020-11-13 18:18:12
1820
原创 iOS——CPU监控
一、了解CPU架构市场上,我们比较熟悉的CPU架构有ARM(arm64)和Intel(x86)等等,目前,市场上大部分的iPhone都是基于arm64架构。因为arm架构有着功耗低的特点,因此广泛应用在移动设备领域。(intel虽然性能好,但功耗高。因此失去了移动端领域的市场份额。)。CPU指令集架构:>i386是针对intel通用微处理器32位处理器>x86_64是针对x86架构的64位处理器>模拟器32位处理器测试需要i386架构,>模拟器64位处理器测试
2020-11-13 17:00:04
1164
1
原创 iOS——WKWebView白屏
在UIWebView上当内存占用太大的时候,App Process会崩溃crash;而当WKWebView总体的内存占用比较大的时候,WebContent Process会崩溃crash,从而导致白屏现象。解决方案借助 WKNavigtionDelegate在iOS 9以后WKNavigtionDelegate新增一个回调函数/*! @abstract Invoked when the web view is establishing a network connection using
2020-11-09 11:47:25
1506
1
原创 iOS—— addScriptMessageHandler 引起WKWebView 循环引用问题
WKWebView 初始化时,有一个参数叫configuration,它是WKWebViewConfiguration类型的参数,而WKWebViewConfiguration有一个属性叫userContentController,它又是WKUserContentController类型的参数。WKUserContentController对象有一个方法- addScriptMessageHandler:name:- addScriptMessageHandler:name:有两个参数,第一个参数是us
2020-11-04 10:56:45
2608
原创 iOS——LLDB调试工具
LLDB是个开源的内置于XCode的调试工具一、p、po 打印区别:po:只会输出对应的值 ,p:返回值的类型以及命令结果的引用名(输出值+值类型+引用名+内存地址)二、expression 缩写:expr 表达式 、打印、或修改值三、Thread1、堆栈打印thread backtrace (缩写bt)2、thread return 跳出当前方法的执行Debug的时候,也许会因为各种原因,我们不想让代码执行某个方法,或者要直接返回一个想要的值。这时候就该t...
2020-10-27 16:53:28
246
原创 iOS 9.0以后 通讯录详解
一、通讯录框架1、ContactsUI.framework 框架。 拥有 AddressBookUI.framework 框架的所有功能,使用起来更加的面向对象。(iOS 9 之前的使用的)2、Contacts.framework 框架。 拥有 AddressBook.framework 框架的所有功能,不再是 C 语言的 API,使用起来非常简单。((iOS 9 之前的使用的))二、CNContactUI一、CNContactPickerViewContro...
2020-10-23 17:21:12
1243
原创 IDFV - Identifier For Vendor(应用开发商标识符)、IDFA - Identifier For Advertising(广告标识符)
一、IDFV这里的Vendor就是应用开发商,通过CFBundleIdentifier(DNS反转格式)的前两部分生成。例如:com.cjh.one和com.cjh.two得到的IDFV是一样的。如果用户将属于此Vendor的所有应用卸载,则IDFV的值会被重置,即使再重装此Vendor的应用,IDFV的值也和之前不同。适用于对内:例如分析用户在应用内的行为等。NSString * IDFV = [[[UIDevice currentDevice] identifierForVendor] U.
2020-10-19 15:20:22
2407
原创 iOS 代码上传至CocoaPods管理
1、创建git仓库选择开源协议选择MIT License,后面pods配置文件会用到。2、将代码上传至 github 并创建分支3、创建、 .podspec命令:pod spec create<项目名称>//例pod spec createjyGGed编辑podspec文件#OC版本 与Swift版本有差别Pod::Spec.new do |spec| spec.name = "JyGGed" #项目名称:导入时需要 sp..
2020-09-03 18:37:11
354
原创 iOS -Base64字符与图片之间的转换
Swift版本1、图片转 Base64字符串//图片转 base 64 guard let image = UIImage(named: "图片名称") else {return} //jpeg格式 compressionQuality: 压缩质量 guard let imageData = image.jpegData(compressionQuality: 1) else { return }//png格式 guard let imag
2020-08-26 17:03:16
5411
原创 iOS UILabel显示定时器文本的跳动问题
目前大多数用来实现定时器显示的控件都是UILabel,显示验证码计数时出现跳动和闪烁的问题。在iOS9以前系统默认的英文字体是Helvetica, 这种字体每个数字的宽度都是相等的。而在iOS9以后默认的英文字体变为San Fransico字体,这种字体每个数字的宽度是不相等的。正是因为数字宽度的不相等就导致了用UILabel来显示定时器文本时出现文字跳动闪烁的问题。 因此解决的方案就是选用一种等宽数字字体显示即可。为此有两个解决方案:1、使用Helvetica字体代码默认字体。
2020-08-26 16:11:20
1281
原创 iOS——通用链接(Universal Link)通过传统HTTPS链接来启动APP的功能
一、Universal Link(通用链接) 简介Universal Link(通用链接)是Apple在iOS9推出的一种能够方便的通过传统HTTPS链接来启动APP的功能,可以使用相同的网址打开网址和APP。当你的应用支持Universal Link(通用链接),当用户点击一个链接是可以跳转到你的网站并获得无缝重定向到对应的APP,且不需要通过Safari浏览器。如果你的应用不支持的话,则会在Safari中打开该链接。Universal Link(通用链接):看起来就是一条普通的https链接,当
2020-07-27 17:48:31
3738
原创 iOS-Tagged Pointer技术
苹果在WWDC2013对于Tagged Pointer特点的介绍:1、Tagged Pointer专门用来存储小的对象,例如NSNumber、NSDate、NSString2、Tagged Pointer指针的值不再是地址了,而是真正的值。所以,实际上它不再是一个对象了,它只是一个披着对象皮的普通变量而已。所以,它的内存并不存储在堆中,也不需要malloc和free。3、在内存读取上有着3倍的效率,创建时比以前快106倍。由此可见,苹果引入Tagged Pointer,不但减少了64位机器下
2020-07-22 14:54:08
362
原创 Swift-循环引用(弱引用(weak reference)和无主引用(unowned reference))
Swift 使用自动引用计数(ARC)机制来跟踪和管理你的应用程序的内存。ARC 会在类的实例不再被使用时,自动释放其占用的内存。如果两个类实例互相持有对方的强引用,因而每个实例都让对方一直存在,就是这种情况。这就是所谓的循环强引用。例:class Person { let name: String init(name: String) { self.name = name } var apartment: Apartment? deinit { print("\(
2020-07-20 18:42:14
1219
原创 iOS——atomic和nonatomic区别及内部实现
iOS开发中使用@property声明属性时,经常用到atomic与nonatomic两个关键字,atomic与nonatomicd的主要区别就是系统自动生成的getter/setter方法不一样1、atomic用于保证属性setter、getter的原子性操作,相当于在getter和setter内部加了线程同步的锁,它并不能保证使用属性的过程是线程安全的,参考源码:objc4的objc-accessors.mm自旋锁...
2020-07-20 17:00:49
390
原创 Swift—— is和 as、 as? 、 as! 区别
is用来判断是否为某种类型 ,as用来做强制类型转换一、 is 判断类型protocol Runnable {func run() }class Persion {}class Student:Persion,Runnable{ func run() { print("跑起来") } func study(){ print("study") }}//判断类型var stu: Any = 10print(stu is In
2020-07-17 18:30:28
900
1
原创 Swift——方法(实例方法、类型方法)Method
Swift将方法分为两类:实例方法、类型方法使用static或者class关键字定义class Car { static var count = 0 init() { Car.count += 1 } static func getCount() ->Int { count}}let c0 = Car()let c1 = Car()let c2 = Car()print(Car.getCount()) // 3警告:类的存储属性使
2020-07-15 20:17:06
885
原创 iOS 关于定时器NSTimer
默认就会执行 ,是在 NSDefaultRunLoopMode 模式下运行的 。如果滑动会切换 UITrackingRunLoopMode 定时器失效。 [NSTimer scheduledTimerWithTimeInterval:1 repeats:YES block:^(NSTimer * _Nonnull timer) { NSLog(@"currentMode == %@",[NSRunLoop currentRunLoop].currentMode); }];.
2020-07-02 11:17:33
258
原创 iOS 13 Tabbar 选中push返回文字渲染返回蓝色 和去除上面黑线
一、设置文字的颜色如果在iOS13中使用以下代码设置Tabbar文字渲染在点击其他item切换或则push返回的时候是会失效的,字体颜色是会返回系统默认的蓝色 UITabBarItem *item = [UITabBarItem appearance]; [item setTitleTextAttributes:normalAttrs forState:UIControlStateNormal]; [item setTitleTextAttributes:selectedA.
2020-06-01 14:22:26
716
原创 CocoaPods 相关命令 (整理中)
1、查看CocoaPods安装地址(例如:/usr/local/bin/pod)which pod2、查看CocoaPods版本(例如:1.9.1)pod --version3、查看gem源(例如:https://gems.ruby-china.com/)gem sources -l一、PodfilePodfile是一个用来描述项目中Target的依赖的文件一个简单的Podfile文件target 'MyApp' do use_frameworks!..
2020-04-29 20:23:41
1463
原创 Masonry 等间隔或等宽高排列多个控件
masonry 目前提供了相应的接口,直接使用即可1、固定宽高不固定间隔 /* MASAxisType :横排还是坚排 withFixedItemLength : 控件的宽或高 leadSpacing: 第一个控件与边缘的间隔 tailSpacing : 最后一个控件与边缘的间隔 */ mas_distributeViews...
2020-01-03 21:35:21
2113
原创 Sign in with Apple (通过Apple 登录)
在 WWDC 2019 上,苹果推出了自家的 Sign in with Apple 功能,这很 Apple。可能苹果看到第三方登录百家争鸣,琢磨着自己也搞了个,这对很多第三方登录来说可能是个威胁。使用 Sign in with Apple 会更加方便、快捷、安全,苹果不会追踪用户在应用中的行为。所以,对于用户来说使用 Sign in with Apple 会更加安全。另外,Sign in ...
2019-09-30 15:53:57
27275
原创 swift流程控制语句——for
1、for条件递增循环(注意:这种C语言风格的for循环语法已在Swift3中被废除,从Swift 3开始 ,去除了自增(++)、自减(--)运算符,建议使用下面的for-in)2、闭区间运算符: a...b ,a <= 取值 <= b 包括 a 和 bfor i in 0...3 { print(i)}//i 默认是let ,有需要时可以声明为var...
2019-06-25 11:09:35
253
原创 Swift——懒加载
swift中也有懒加载的方式 (苹果的设计思想:希望所有的对象在使用时才真正加载到内存中)和OC不同的是swift有专门的关键字来实现懒加载lazy关键字可以用于定义某一个属性懒加载格式:lazy var 变量: 类型 = { 创建变量代码 }()...
2019-06-16 17:17:56
966
1
原创 Swift - 关于属性(Property)
1、Swift中类可以使用计算属性,即使用get和set来间接获取/改变其他属性的值class Calumator{ var x:Int = 5; var y:Int = 6; var sum:Int{ get{ return x + y } set(val)...
2019-06-16 17:03:00
808
原创 Swift - class与staitc关键字的区别与使用
一、static 关键字1,结构体 struct 和枚举 enum 的静态属性,静态方法使用 static 关键字struct Persion { var name :String = "" var age :Int = 0 static var intersetRate :Double = 10 static func in...
2019-06-16 16:28:32
294
原创 Swift ——函数上部分
//1、无返回值的函数func test(name:String){ print(name)}test(name: "哈哈")//2、有返回值的函数func test2(name:String)->Bool{ return true}let isName = test2(name: "哈哈")print(isName)//3、没有形参 多个返回值...
2019-06-16 16:10:04
305
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人