iOS开发中的零碎知识点笔记 韩俊强的博客

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

每日更新关注:http://weibo.com/hanjunqiang  新浪微博

1.关联

objc_setAssociatedObject关联是指把两个对象相互关联起来,使得其中的一个对象作为另外一个对象的一部分。

2.tableView的beginUpdates 和 endUpdates

3.关于代码与storyBoard的自动布局

4.国际化与本地化,为了实现全球化

5.技巧

可以通过设置Scheme来设置app所运行的语言,你想要什么语言就是什么语言,而不用重新设置系统的语言。

6.ios8新特性,加载js

如果我想要加载一个形如网页的东西,那么我需要对整个网页进行动态的编辑,图文混编,但是这样做那面会带来很困难的操作,其实服务端那边很好的可以解决这个问题,用一个网页即可以搞定。服务端那边只需返回一个html文档,然后客户端根据这个html文档进行解析即可。

WKWebView新特性:

在性能、稳定性、功能方面有很大提升(最直观的体现就是加载网页是占用的内存,模拟器加载百度与开源中国网站时,WKWebView占用23M,而UIWebView占用85M);

允许JavaScript的Nitro库加载并使用(UIWebView中限制);

支持了更多的HTML5特性;

高达60fps的滚动刷新率以及内置手势;

将UIWebViewDelegate与UIWebView重构成了14类与3个协议

每日更新关注:http://weibo.com/hanjunqiang  新浪微博

7.技巧

写函数的时候一定要判断数据的安全性,这样出错的几率就会很小,尤其是要判断它的类型安全,是否为空等,不然程序会奔溃。还有需要注意的地方就是,写每一个函数的时候要多方面进行考虑,考虑代码的合法性。使用前不判断参数的正确性,在函数内部对参数的可靠性进行判断。如果这样的话,你用到函数的时候都需要对这些参数进行判断其合法性如果放倒函数中那么只需要判断一次就可以了。

8.应用内购买

9.sqlite

利用sqlite创建索引,索引是关系数据库中用于存放每一条记录的一种对象,主要目的是加快数据的读取速度和完整性检查。索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。

10.数据库版本的更新,当应用数据表需要添加新表的时候,需要对数据插入新的字段,那么久需要更新数据库

11.友盟统计

当应用上线后可以观察到应用的日志文件,crash日志,页面记时日志,收集并归类崩溃日志,提供错误管理及分析工具,帮助开发者更好的解决问题,从而提高应用的稳定性,改善应用质量。

12.可以获取手机上的语言?你知道吗

13.使用js的时候需要使用webView

每日更新关注:http://weibo.com/hanjunqiang  新浪微博

  
[objc]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. [webView stringByEvaluatingJavaScriptFromString:scriptString];  

 

14.做常用设备登陆的策略可以使用服务器,服务器把所有登陆过的设备都存储下来。

15.涉及到系统偏好设置的选项,把它都放到一个文件中,这样修改起来比较容易。

16.利用VVDocumenter-Xcode

自动生成注释,也就是xcode的插件.运行VVDOcumenter-Xcode编译后,重新打开xcode即可以使用了

17.如何使用xib进行界面的搭建

利用file’s owner进行关联,形如storyBoard中的segue

18.如何在一个项目中使用多个storyBoard

19.如何利用代码与storyBoard或者XIB进行自动布局

20、XIB进行国际化

首先在工程中需要添加你想要使用的语言,然后新建视图的时候选择使用XIB,这样xcode就会自动为你新建一个xib文件,然后在inspector中的localization中选择localized,开始时一定要选择base,然后勾选其他语言,这样你发现XIB文件会有子目录,然后在子目录下你可以设置不同的语言翻译。

21.tableView小技巧

根据设置不同的identifier取出不同类型的cell,在设置identifier的时候可以设置成类名,这样的话就可以省很多事,而且很方便。

22. 技巧

 
[objc]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. [[UIApplication sharedApplication] setStatusBarHidden:YES];  
 

23.版本控制

每日更新关注:http://weibo.com/hanjunqiang  新浪微博

gitLab和sourceTree结合使用对源代码进行管理,如何进行相关的配置

24.发送语音消息

三方库opencore-amr

25.Sqlcipher+FMDB,数据库文件加密

https://www.zetetic.net/sqlcipher/ios-tutorial/

26.技巧

图片浏览XHImageViewer

28.技巧

根据button的不同状态可以设置button的事件,相当于微信发送语音信息的按钮,按住录音,松开结束录音并发送消息,

29.技巧

把block指针变量设置成私有的,这样是不是很好用。

30.功能说明

1
[objc]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(overtimeRemind) object:nil];  

先看这段代码:

[objc]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. - (void)viewDidAppear:(BOOL)animated {  
  2.     [super viewDidAppear:animated];  
  3.     [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(showLeft) object:nil];  
  4.     [self performSelector:@selector(showLeft)];  
  5. }  

 

为什么[self performSelector:@selector(showLeft)];前面还需要调用cancelPreviousPerformRequestsWithTarget:self方法呢?

那是因为有时候我们通过[self performSelector:@selector(showLeft)];来实现showLeft方法,可能会出现延迟执行或内存泄漏的问题,而前面加上这句话:

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(showLeft) object:nil];

可以先将这在执行的方法取消,在继续执行,有效避免了上述两个问题。

31.runLoop

关于runloop的一些了解,runloop是一种运行池,是和多线程有关的东西,监听事件的产生,如果有新事件,那么runloop会监听,一旦监听到了,就会执行监听到的方法。

32.技巧

关于用户头像的问题,点击放大,等其他手势的库ESImageViewController

33.技巧

1
[objc]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. NSString *pullSuccessIdString = [pullSuccessMsgIds componentsJoinedByString:@","];  

 

把数组中的每个元素用逗号拼接成一个字符串

34.数据共享

Multipeer Connectivity Framework ,近距离通信,双方建立连接后可以彼此进行通信

35.问题

oc中不支持多继承,也就说一个类只能继承至一个类,不能继承多个类。实现多继承可以使用协议来实现,也就说某个类中可以继承多个协议,这久相当于多继承,我可以拥有很多协议并且实现它。

36.multipeerConnectivity的实现,对文件进行共享

37.indexPathForSelectedRow

38.如何给另一台电脑进行真机调试

《1》导出p12文件

《2》导出描述文件

《3》在另一台电脑上双击即可以安装了

每日更新关注:http://weibo.com/hanjunqiang  新浪微博

39.问题

1
[objc]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. [[NSBundle mainBundle] pathForResource:@"quickLookWord" ofType:@"docx”];  

找不到文件目录,[NSBundle mainBundle]其获取的路径是你程序的安装路径下的资源文件位置。 在xcode中采用add file to 方式添加文件时,一般情况下xcode会自动将文件添加到你的资源文件,而且,这些文件在你工程的 build Phases中的 copy Bundle Resources中可以查看到。但是有时候,由于xcode的问题,采用add files to 不能自动添加到你的资源文件中,这时,可以采用copy Bundle Resources下面的“+”号,手动将文件添加到你的资源文件中,这样就可以解决问题了。

40.功能实现

实现文件的一些操作,包括文件的近距离通信,MC,AirDrop,文件预览

41.Uniform Type Identifiers (UTIs)统一标示符(UTIs)

当你把图片分享之其他iOS设备,接收方会自动打开拍照类app并加载图片。如果你传递的是PDF文件,接收方设备可能会提示你选择一个app来打开文件,或者直接在iBooks中打开。iOS是如何知道哪个app适合什么样的数据类型呢?

在系统中,苹果用UTIs来处理数据类型的标示。简单的说,一个uti是用来标示特定类型的数据或文件。例如,com.adobe.pdf标示一个pdf文件,而public.png代表一个PNG图片。在这里可以查看已经在系统中注册了的完整的UTIs清单。(love cc cat)应用程序可以打开在iOS系统中已经注册了的UTI。因此无论文件是否被打开,iOS都会用特定的程序打开这个文件。

42.关于info.plist文件的操作

[objc]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];  
  2. NSString *name = [infoDictionary objectForKey:@"CFBundleName"];  
  3. NSString *version = [infoDictionary objectForKey:@"CFBundleVersion"];  
 

43.URL Scheme

是类似http://,ftp://,afp://这样的东西,通常是用传输协议作为URL Scheme。不过事实上,你可以在iOS和Mac中注册任何类型的URL Scheme。当用户在浏览器中访问你的自定义URL Scheme的链接的时候,操作系统就会打开你的程序,响应这个请求。

要在程序中注册自定义URL Scheme非常简单。主要分为两个步骤:在程序的Info.plist中加入你需要注册的URL Scheme,然后在你的应用程序中加入处理这类请求的代码。

其中,第一个步骤对于iOS和Mac应用程序来说是完全相同的。方法如下:

在Info.plist中,增加一个字段,名称为CFBundleURLTypes(URL Types)。Xcode会自动为你创建一个必须的键:URL Identifier(CFBundleURLName),这个键的值可以赋值为一个唯一的字符串。通常是逆向的域名结构,如:me.venj.myapp。然后在URL Types这个键下增加一个子项:CFBundleURLSchemes(URL Schemes),这里填入你想注册的URL Scheme的名称,如:cloud。你可以增加多个URL Scheme。

44.在我的APP中打开其他的App

那怎样来制作从一个应用打开其他应用,这其实很简单,打开info.plist,添加一项URL types,展开URL types,再展开Item1,将Item1下的URL identifier修改为URL Scheme,展开URL Scheme,将Item1的内容修改为myapp其他程序可通过myapp://访问此自定义URL。其实就是类似下面的样式。

https://appsto.re/cn/YSJRZ.i

45.问题

添加约束后,当想改变约束的时候,可以更具约束获得约束的值。比如我设置了高的约束是20,那么我以后想把高的约束改为40,那我咋么办,我需要根据这个约束进行修改。或者我需要根据某个约束获取起约束的值,那么我也需要根据约束来获得它的值。

46.关于自动布局修改约束

如果给一个视图添加了约束,你可以修改约束,来改变之前所添加的约束

ContentHightConstraint.constant = 150; 修改之前的约束

47.用通知中心的缺点别人看代码比较

48.问题

NSTimer不能归档持久化,只有实现了NScode协议的才能持久化,即使是归档也不好使,不知道有没有一种方法可以进行序列化

49.技巧

在iOS7之后我们可以用UIFont的preferredFontForTextStyle:类方法来指定一个样式,并让字体大小符合用户设定的字体大小。通过手机设置app字体的大小。目前可供选择的有六种样式:

50.mac终端命令

vi 文件名

q!强制退出

i编辑模式

esc commend 模式 shift +double click z 保存并推出

cat 文件名,查看文件内容

51.Debug的一些有用的操作

截取屏幕图,debug---》view debugging ——>take screenshot of iPhone

查看view的frame  debug ——> show view frame

52.真正懂得自动布局吗?

自动布局会自动根据约束进行计算view的frame,所以你添加的约束必须保证能正常就算出view的frame,如果不能那么你就需要添加约束,也就是说,你既不能多添加了约束也不能少添加约束,UILAbel如果不添加高度约束,它会自动帮你计算出高度的。总的来说,只要让自动布局知道视图的frame就行。如果不能知道,那么会报错

42.你的视图有比较简单的布局改变

当需要产生动画或动态添加视图时,autolayout就暴露了出我认为让人抓狂的元凶——优先级(Priority)和布局冲突。 autolayout对于相同方位的约束,如都是描述离superview上边缘距离的约束,如果这两个约束的数值不同,但是优先级一样,则 autolayout将报布局冲突,将会根据其计算丢弃某一条约束(这时可能就会丢弃你想要的约束,而恰恰保留了你不想看到的布局)。所以,当我们发生布 局变化时,无法像frame的绝对定位,直接改变,并且只有唯一的位置信息。那么,我们该怎么处理这种布局冲突呢?那就是让描述相同但数值不同的这两个约 束采用不同的优先级。autolayout默认将使用数值较大的优先级约束。?但是当我们新增了一个更高优先级约束改变了视图布局,在完成一些操作后,又想变回去怎么办?这时就必须删除更高优先级的约束。?所以,对于视图有动态变更时,我的通常做法是:为需要变更的控件新增默认constraint,但对于这个默认constraint先降低优先级,在发生 变化时再新增一个更高优先级的constraint2,且代码中用一个Dictionary缓存该constraint2的对象,便于我随时删除或重新新 增,让视图来回变化。

53.AD-hoc 是干什么的

是在把app发布到store上进行测试用的。也就是说我把对方设备好添加进来,我打一个包给对方,对方就可以通过itune安装这个ipa文件,就可以进行真机测试了,不需要通过xcode进行安装了。

54.枚举的定义方法

 
[objc]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. enum {  
  2.      UITableViewCellStyleDefault,  
  3.      UITableViewCellStyleValue1,  
  4.      UITableViewCellStyleValue2,  
  5.      UITableViewCellStyleSubtitle  
  6. };  
  7. typedef enum {  
  8.      UITableViewCellStyleDefault,  
  9.      UITableViewCellStyleValue1,  
  10.      UITableViewCellStyleValue2,  
  11.      UITableViewCellStyleSubtitle  
  12. } UITableViewCellStyle;  
  13. typedef NS_ENUM(NSInteger, UITableViewCellStyle) {  
  14.      UITableViewCellStyleDefault,  
  15.      UITableViewCellStyleValue1,  
  16.      UITableViewCellStyleValue2,  
  17.      UITableViewCellStyleSubtitle  
  18. };  
  19. typedef enum {  
  20.      UITableViewCellStyleDefault,  
  21.      UITableViewCellStyleValue1,  
  22.      UITableViewCellStyleValue2,  
  23.      UITableViewCellStyleSubtitle  
  24. };  
  25. typedef NSInteger UITableViewCellStyle;  

55.如果页面上的数据是在服务端,且服务端的信息可能会随时改变。那么我们需要把每次请求数据确保每次的数据是最行的数据。但是每次加载数据是不难免会很影响用户体验,所以我需要本地缓存数据。页面先加载本地数据,然后在进行网络请求加载数据。等网络请求数据成功以后,在把新加载进来的数据更新UI

每日更新关注:http://weibo.com/hanjunqiang  新浪微博

56.数据库的一些操作

[objc]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. sqlite> CREATE TABLE testtable (first_col integer DEFAULT 0, second_col varchar DEFAULT 'hello');  
  2. sqlite> CREATE TABLE testtable (first_col integer UNIQUE);  
  3. sqlite> CREATE TABLE testtable (first_col integer CHECK (first_col < 5));  
  4. sqlite> ALTER TABLE testtable ADD COLUMN second_col integer;  
  5. sqlite> CREATE VIEW testview AS SELECT * FROM testtable WHERE first_col > 100;  
  6. sqlite> CREATE TEMP VIEW tempview AS SELECT * FROM testtable WHERE first_col > 100;  
  7. sqlite> DROP VIEW testview;  

 

57.uitextView获取光标的位置

 
[objc]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. int location = aTextView.selectedRange.location;  

原文地址:http://blog.csdn.net/qq_31810357/article/details/50812713
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
8天前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
1天前
|
存储 前端开发 Swift
探索iOS开发:从新手到专家的旅程
本文将带您领略iOS开发的奇妙之旅,从基础概念的理解到高级技巧的掌握,逐步深入iOS的世界。文章不仅分享技术知识,还鼓励读者在编程之路上保持好奇心和创新精神,实现个人成长与技术突破。
|
15天前
|
安全 数据处理 Swift
深入探索iOS开发中的Swift语言特性
本文旨在为开发者提供对Swift语言在iOS平台开发的深度理解,涵盖从基础语法到高级特性的全面分析。通过具体案例和代码示例,揭示Swift如何简化编程过程、提高代码效率,并促进iOS应用的创新。文章不仅适合初学者作为入门指南,也适合有经验的开发者深化对Swift语言的认识。
36 9
|
11天前
|
设计模式 Swift iOS开发
探索iOS开发:从基础到高级,打造你的第一款App
【10月更文挑战第40天】在这个数字时代,掌握移动应用开发已成为许多技术爱好者的梦想。本文将带你走进iOS开发的世界,从最基础的概念出发,逐步深入到高级功能实现,最终指导你完成自己的第一款App。无论你是编程新手还是有志于扩展技能的开发者,这篇文章都将为你提供一条清晰的学习路径。让我们一起开始这段旅程吧!
|
15天前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异和挑战
【10月更文挑战第37天】在移动应用开发的广阔舞台上,安卓和iOS这两大操作系统扮演着主角。它们各自拥有独特的特性、优势以及面临的开发挑战。本文将深入探讨这两个平台在开发过程中的主要差异,从编程语言到用户界面设计,再到市场分布的不同影响,旨在为开发者提供一个全面的视角,帮助他们更好地理解并应对在不同平台上进行应用开发时可能遇到的难题和机遇。
|
13天前
|
iOS开发 开发者
探索iOS开发中的SwiftUI框架
【10月更文挑战第39天】在苹果的生态系统中,SwiftUI框架以其声明式语法和易用性成为开发者的新宠。本文将深入SwiftUI的核心概念,通过实际案例展示如何利用这一框架快速构建用户界面,并探讨其对iOS应用开发流程的影响。
|
16天前
|
JSON 前端开发 API
探索iOS开发之旅:打造你的第一个天气应用
【10月更文挑战第36天】在这篇文章中,我们将踏上一段激动人心的旅程,一起构建属于我们自己的iOS天气应用。通过这个实战项目,你将学习到如何从零开始搭建一个iOS应用,掌握基本的用户界面设计、网络请求处理以及数据解析等核心技能。无论你是编程新手还是希望扩展你的iOS开发技能,这个项目都将为你提供宝贵的实践经验。准备好了吗?让我们开始吧!
|
20天前
|
设计模式 前端开发 Swift
探索iOS开发:从初级到高级的旅程
【10月更文挑战第31天】在这篇文章中,我们将一起踏上iOS开发的旅程。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和技巧。我们将从基础开始,逐步深入到更高级的技术和概念。让我们一起探索iOS开发的世界吧!
|
19天前
|
存储 数据可视化 Swift
探索iOS开发之旅:从新手到专家
【10月更文挑战第33天】在这篇文章中,我们将一起踏上一场激动人心的iOS开发之旅。无论你是刚刚入门的新手,还是已经有一定经验的开发者,这篇文章都将为你提供宝贵的知识和技能。我们将从基础的iOS开发概念开始,逐步深入到更复杂的主题,如用户界面设计、数据存储和网络编程等。通过阅读这篇文章,你将获得成为一名优秀iOS开发者所需的全面技能和知识。让我们一起开始吧!
|
20天前
|
移动开发 Java Android开发
探索Android与iOS开发的差异性与互联性
【10月更文挑战第32天】在移动开发的大潮中,Android和iOS两大平台各领风骚。本文将深入浅出地探讨这两个平台的开发差异,并通过实际代码示例,展示如何在各自平台上实现相似的功能。我们将从开发环境、编程语言、用户界面设计、性能优化等多个角度进行对比分析,旨在为开发者提供跨平台开发的实用指南。
38 0
下一篇
无影云桌面