ios开发

iOS开发日记30-Autolayout

十年热恋 提交于 2020-03-15 09:15:18
今天博主有一个Autolayout的需求,遇到了一些困难点,在此和大家分享,希望能够共同进步. 1 、概述 在以前的 iOS 程序中,是如何设置布局 UI 界面的? (1)经常编写大量的坐标计算代码 (2)为了保证在3.5 inch和4.0 inch屏幕上都能有完美的UI界面效果,有时还需要分别为2种屏幕编写不同的坐标计算代码(即传说中的“屏幕适配”) 什么是 Autolayout ? (1)Autolayout是一种“自动布局”技术,专门用来布局UI界面的 (2)Autolayout自iOS 6开始引入,由于Xcode 4的不给力,当时并没有得到很大推广 (3)自iOS 7(Xcode 5)开始,Autolayout的开发效率得到很大的提升 (4)苹果官方也推荐开发者尽量使用Autolayout来布局UI界面 (5)Autolayout能很轻松地解决屏幕适配的问题 Autoresizing (1)在Autolayout之前,有Autoresizing可以作屏幕适配,但局限性较大,有些任务根本无法完成 (2)相比之下,Autolayout的功能比Autoresizing强大很多 Autolayout 的 2 个核心概念: (1)参照 (2)约束 2 、 Autolayout 的警告和错误 警告: 控件的frame不匹配所添加的约束, 比如: 约束控件的宽度为100,

iOS开发中懒加载的使用和限制

只谈情不闲聊 提交于 2020-03-14 09:48:04
1 在开发过程中很多时候,很多控件和对象需要alloc为了,提高开发效率使得懒加载得以产生。 2 下边用代码解释: 1 - (NSMutableArray *)newsArr{ 2 if (!_newsArr) { 3 self.newsArr = [NSMutableArray array];//1 4 5 // 2、 _newsArr = [[NSMutableArray alloc]init]; 6 7 // 3、 _newsArr = [NSMutableArray array]; 8 } 9 10 return _newsArr ; 11 } 3 在上述代码中,我想得到一个可变数组newsArr,在1、2、3的写法中, 3.1 第一种写法:利用点语法setter对newsArr开辟空间; 3.2 第二种写法:利用allocd对属性建立的_newsArr开辟空间 3.3 第三种写法:利用便利构造器,也能获得_newsArr,但是它的不足也是显而易见的,当我们的newsArr需要常驻内存时,会出现崩溃问题; 来源: https://www.cnblogs.com/tig666666/p/4814771.html

备战2020:那些 iOS开发 常用的底层面试题合集!

心不动则不痛 提交于 2020-03-12 19:06:28
一、Runtime 一个objc对象的isa的指针指向什么?有什么作用? 一个 NSObject 对象占用多少内存空间? 说一下对 class_rw_t 的理解? 说一下对 class_ro_t 的理解? 说一下对 isa 指针的理解 说一下 Runtime 的方法缓存?存储的形式、数据结构以及查找的过程? 使用runtime Associate方法关联的对象,需要在主对象dealloc的时候释放么? 实例对象的数据结构? 什么是method swizzling(俗称黑魔法) 什么时候会报unrecognized selector的异常? 如何给 Category 添加属性?关联对象以什么形式进行存储? 能否向编译后得到的类中增加实例变量?能否向运行时创建的类中添加实例变量?为什么? 类对象的数据结构? runtime如何通过selector找到对应的IMP地址? runtime如何实现weak变量的自动置nil?知道SideTable吗? objc中向一个nil对象发送消息将会发生什么? objc在向一个对象发送消息时,发生了什么? isKindOfClass 与 isMemberOfClass Category 在编译过后,是在什么时机与原有的类合并到一起的? Category 有哪些用途? Category 的实现原理? _objc_msgForward函数是做什么的

iOS开发数据库篇—SQLite常用的函数

核能气质少年 提交于 2020-03-12 11:32:09
一、简单说明 1.打开数据库 int sqlite3_open( const char *filename, // 数据库的文件路径 sqlite3 **ppDb // 数据库实例 ); 2.执行任何SQL语句 int sqlite3_exec( sqlite3*, // 一个打开的数据库实例 const char *sql, // 需要执行的SQL语句 int (*callback)(void*,int,char**,char**), // SQL语句执行完毕后的回调 void *, // 回调函数的第1个参数 char **errmsg // 错误信息 ); 3.检查SQL语句的合法性(查询前的准备) int sqlite3_prepare_v2( sqlite3 *db, // 数据库实例 const char *zSql, // 需要检查的SQL语句 int nByte, // SQL语句的最大字节长度 sqlite3_stmt **ppStmt, // sqlite3_stmt实例,用来获得数据库数据 const char **pzTail ); 4.查询一行数据 int sqlite3_step(sqlite3_stmt*); // 如果查询到一行数据,就会返回SQLITE_ROW 5.利用stmt获得某一字段的值(字段的下标从0开始) double sqlite3

iOS开发总结-Xcode常见错误

♀尐吖头ヾ 提交于 2020-03-12 04:46:41
iOS开发总结-Xcode常见错误 "file/file.h"filenotfound 如果遇到这种类型的问题报错,可以分为三部来解决,由简到复杂一步一步来,直到解决问题位置。 1. 点击Xcode -> Project -> Clean清除缓存或者使用⌘ + ⇧ + k快捷键来清除。 2. 点击Xcode -> Window -> Projects 清除Derived Data的缓存,在清除缓存之前先彻底退出Xcode,然后直接删除缓存文件夹。 3. 再Build Settings -> Header Search Paths 添加路径,$(SRCROOT)/项目名称/文件路径。 如果上面这三种方法都没有解决问题,就要考虑一下文件是否存在或者导入方式是否有错误了。例如:# include<>和# include""、# import<>和# import""的导入方式是否有错误。 ld: -pie can only be used when targeting iOS4.2or laterclang: error: linker command failed withexitcode1(use -v to see invocation) 首先注意:-pie can only be used when targeting iOS 4.2 or later -pie只能在ios4

iOS开发关于真机—App发布证书和调试证书配置

安稳与你 提交于 2020-03-11 19:24:02
发布证书、真机调试证书、测试证书、推送证书详细过程 更重要的是让你彻底明白为什么要这样配置证书 一:发布证书 遵旨: 哪个 开发者的 哪台 电脑要发布 哪个 app (这句话可以多读几遍) 通过上边的遵旨可以得出要发布app需要哪些文件,为什么配置过程中要上传或者生成那些文件,结论如下 申请开发者账号,即花费了99刀给apple的账号,这是你可以登录developer.apple.com这个网站了 证书签名请求文件(CSR:CertificateSigningRequest) 让你的电脑具备了发布app的功能,这个CSR文件就描述了这台电脑,文件的生成方式是通过mac的签名文件(通过key),结合开发者账号生成的. 在开发者网站填写要上传的app的相关信息,告诉苹果我们要上传哪个app;区分app是通过xcode项目中的bundle ID实现的,也就是说这个bundle ID在你填写发布app时是必填项,得注意; 上边3条对于发布一个app来说貌似已经够了,但是接下来请各位注意了,这些东西得拿去让苹果验证的啊亲,苹果如何验证啊; CSR结合开发者账号生成的 ios_distribution.cer文件 : 是要装在在你mac的key中; Bundle ID: 在你的xcode的项目里; 注意你上传app是通过xcode完成的那么苹果如何验证呢?这时候.mobileprovision

iOS开发-OC篇-NSDate

怎甘沉沦 提交于 2020-03-11 07:47:26
今天总结一下OC中 NSDate 的一些简单的用法,注意可不是 NSData 哦! NSDate 的使用 1> NSDate初始化方法 //获取当前时间 NSDate * date = [NSDate date]; //返回以当前时间为基准,然后过了secs秒的时间 [NSDate dateWithTimeIntervalSinceNow:60 * 60 * 24]; //返回以lastDate为基准,然后过了secs秒的时间 [NSDate dateWithTimeInterval:60 * 60 * 24 sinceDate:lastDate]; //返回以2001年1月1日为基准,然后过了secs秒的时间 [NSDate dateWithTimeIntervalSinceReferenceDate:0]; //返回以1970年1月1日为基准,然后过了secs秒的时间 [NSDate dateWithTimeIntervalSince1970:60 * 60 * 24]; 2> 获取时间界限方法 //将来的时间界限4000年 [NSDate distantFuture]; //过去的时间界限0000年 [NSDate distantPast]; 3> 比较时间方法 //比较两个时间是否相同 [date isEqualToDate:date2]; //返回比较晚的日期 [date

iOS开发——消息推送跳转

纵然是瞬间 提交于 2020-03-08 17:50:12
项目开发用集成是极光推送JPush 这里主要是消息推送过来处理对应界面跳转 同时看到两篇写的不错的相关博客分享一下: http://www.jianshu.com/p/eaf07c4372a8 http://www.jianshu.com/p/d4460fed39c1 推送的是根据用户ID及用户的绑定的JPush注册ID,对应用户推送。 首先看一下推送过来的消息格式: 推送来的字典:{ "_j_msgid" = 976126105; aps = { alert = "\U865a\U62df\U7b56\U7565I160704711100001\U5356\U51fa\U80a1\U7968:\U5b9c\U534e\U5065\U5eb7100\U80a1\U3001\U4ef7\U683c\U4e3a32.15\U3001\U5171\U8ba13215\U2026\U2026"; badge = 50; sound = ""; }; "pro_id" = 160704711100001; "pro_type" = 1; "type_id" = 1; } 其中 "pro_id" = 160704711100001; "pro_type" = 1; "type_id" = 1; 这三个是后台服务 自定义的键值信息,根据自己开发的需要自定义。 主要靠这三个信息跳转到对应的界面。

iOS开发缓存机制之—内存缓存机制

北战南征 提交于 2020-03-08 11:12:56
在IOS应用程序开发中,为了减少与服务端的交互次数,加快用户的响应速度,一般都会在iOS设备中加一个缓存的机制。 这篇文章将介绍一下如何在iOS设备中进行缓存,本文先介绍一下将内容缓存到内存中,下一篇文章就介绍一下在iOS磁盘上缓存内容。 使用缓存的目的是为了使用的应用程序能更快速的响应用户输入,是程序高效的运行。有时候我们需要将远程web服务器获取的数据缓存起来,减少对同一个url多次请求。 内存缓存我们可以使用sdk中的NSURLCache类。NSURLRequest需要一个缓存参数来说明它请求的url何如缓存数据的,我们先看下它的CachePolicy类型。 1、NSURLRequestUseProtocolCachePolicy NSURLRequest默认的cache policy,使用Protocol协议定义。 2、NSURLRequestReloadIgnoringCacheData 忽略缓存直接从原始地址下载。 3、NSURLRequestReturnCacheDataElseLoad 只有在cache中不存在data时才从原始地址下载。 4、NSURLRequestReturnCacheDataDontLoad 只使用cache数据,如果不存在cache,请求失败;用于没有建立网络连接离线模式; 5

IOS开发缓存机制之—本地缓存机制

戏子无情 提交于 2020-03-08 11:09:19
功能需求 这个缓存机制满足下面这些功能。 1、可以将数据缓存到本地磁盘。 2、可以判断一个资源是否已经被缓存。如果已经被缓存,在请求相同的资源,先到本地磁盘搜索。 3、可以判断文件缓存什么时候过期。这里为了简单起见这里,我们在请求url资源的时候,给每次请求的文件设定一个过期的时间。 4、可以实现:如果文件已经被缓存,而且没有过期,这将本地的数据返回,否则重新请求url。 5、可以实现:如果文件下载不成功或者下载没有完成,下次打开程序的时候,移除这些没有成功或者没有下载完成的文件。 6、可以实现:同时请求或者下载多个资源。 设计实现: 1、设计一个CacheItem类,用来请求一个web连接,它的一个实例表示一个缓存项。这个CacheItem类,需要一个url创建一个NSURLConnection,去请求web资源。使用CacheItem类主要用来请求web资源。 /* ---------缓存项-------------- */ @interface CacheItem : NSObject { @public id<CacheItemDelegate> delegate; //web地址 NSString *remoteURL; @private //是否正在下载 BOOL isDownloading; //NSMutableData对象 NSMutableData