1.关于拍摄

  • TGCameraViewController – 基于 AVFoundation 的自定义相机。样式漂亮,轻量并且可以很容易地集成到 iOS 项目中。不会内存吃紧

2.block 中对控制器本身的self方法的调用一定要改成weak 属性

3.在使用tabbarController 的时候一定要使用自定义的控制器,中间的tabbar最好也是自定义的

4.MVVMReactiveCocoa     重要 这个是框架问题

5.在使用字符串的时候考虑控件的大小和语言,

举例:

desc = [QKYStringHelper localStringNamed:@"实签合同"];

self.backMoneyLabel.text = [NSString stringWithFormat:@"%@%d%%(¥%@)",desc,trueRate1,[MachaoTool getNumberFormatByNumerString:trueA]];

6.在使用XLForm 时候要自定义组标题的内容可以使用

viewForHeaderInSection

覆盖之前titleForHeaderInSection

这个需要拼接很多参数,如果有固定的写死的,也要分开来,在前边单独定义一个属性,这个方便应用的国际化

7.开发swift中可是用

ObjectMapper 字典转模型,

之所以使用swift的,是因为swift中的基本数据类型和oc的有所区别,如果用oc的字典转模型,会有写类型转不过来,比方说 Int 类型的 ,NSDate 类型的

8.ios 开发文件分类体系:

AppDelegate
Models
Macro
General
Helpers
Vendors
Sections
Resources

一个合理的目录结构首先应该是清晰的,让人一眼看上去就能大概了解目录的职责,且容易应对新的变化。

AppDelegate

这个目录下放的是AppDelegate.h(.m)文件,是整个应用的入口文件,所以单独拿出来。

Models

这个目录下放一些与数据相关的Model文件,里面大概是这样:

Models
|- BaseModel.h
|- BaseModel.m
|- CollectionModel.h
|- CollectionModel.m
...

Macro

这个目录下放了整个应用会用到的宏定义,里面大概是这样:

Macro
|- AppMacro.h
|- NotificationMacro.h
|- VendorMacro.h
|- UtilsMacro.h
...

AppMacro.h 里放app相关的宏定义,如:

// 表情相关
#define EMOTION_CACHE_PATH @"cachedemotions"
#define EMOTION_RECENT_USED @"recentusedemotions"
#define EMOTION_CATEGORIES @"categoryemotions"
#define EMOTION_TOPICS @"emotiontopics" // 收藏相关
#define COLLECT_CACHE_PATH @"collected" // 配图相关
#define WATERFALL_ITEM_HEIGHT_MAX 300
#define WATERFALL_ITEM_WIDTH 146

NotificationMacro.h 里放的是通知相关的宏定义。

UtilsMacro.h 里放的是一些方便使用的宏定义,如:

#define UIColorFromRGB(r,g,b) [UIColor \
colorWithRed:r/255.0 \
green:g/255.0 \
blue:b/255.0 alpha:1] #define NSStringFromInt(intValue) [NSString stringWithFormat:@"%d",intValue]

VendorMacro.h 里放一些第三方常量,如:

#define UMENG_KEY @"xxxxx"
#define UMENG_CHANNEL_ID @"xxx"

如果有新的类型的宏定义,可以再新建一个相关的Macro.h。

General

这个目录放会被重用的Views/Classes和Categories。里面大概是这样:

General
|- Views
|- TPKScollView
|- TPKPullToRefresh
...
|- Classes
|- TPKBaseViewController
|- TPKHorizontalView
...
| - Categories
|- UIViewController+Sizzle
|- UIImageView+Downloader
...

这里的TPK是项目的首字母缩写。

Helpers

这个目录放一些助手类,文件名与功能挂钩。里面大概是这样:

Helpers
|- TPKShareHelper
|- TPDBHelper
|- TPKEmotionHelper
...

助手类的主要作用是帮助Controller瘦身,也可以提供一定程度的复用。

Vendors

这个目录放第三方的类库/SDK,如UMeng、WeiboSDK、WeixinSDK等等。

Sections

这个目录下面的文件对应的是app的具体单元,如导航、瀑布流等等。里面大概是这样:

Sections
|- Menu
|- Setting
|- Collection
...

Resources

这个目录下放的是app会用到的一些资源,主要是图片。

9.在对页面进行布局的情况加不适用 自动布局 ,采用SDAutoLayout ,这个是基于不同位置的库,

10.在swift开发中,经常要用到tableviewcontroller ,为了增加程序的扩展性,应该使用泛型来定义数据类型和cell类型,

这样可以方便在后续中进行扩展,使用例子https://github.com/agelessman/ConfigurableTableViewController.git

11.写一个网络请求的basic类来封装网络请求,目的是在更换网络框架的时候很方便,把全局的请求参数都放到基类中添加,可以在每次发请求之前都对当前的网络情况进行判断,然后通过block进行返回

12 . 当我们使用系统的对象不能满足我们需求的情况,通常我们采取集成系统控件,从写他的某个方法

几个例子:

NSNumberFormatter  如果我们需要19:00 这样的数字, 系统是满足不了的, 我们可以重写他的内部方法

- (NSString *)stringFromNumber:(NSNumber *)number

13. 在对图像的处理,图像和视频的捕获中 使用GPUImage 进行处理

14. 在平时的开发中,使用到的所有的权限相关的东西 比如AVFoundation 中的摄像头和麦克风中的权限,需要一个统一的方法进行设置,然后接受一个error 参数,代码如下

 - (void)setupSessionWithError:(NSError **)error
{
}

然后在控制器中根据这个错误指针 给用户提示

15. iOS平台有哪些WebSocket和Socket的开源框架

Socket开源框架有:CocoaAsyncSocketsocketio/socket.io-client-swift

WebSocket开源框架有:facebook/SocketRockettidwall/SwiftWebSocket

16. swift 开发中 使用delegate 的时候,要设置为weak 属性,不然不能释放

17. swift 写的api 中的类使用public 修饰,否则oc 不能访问

18. 在开发中 接口文件最好能再次封装到一个或多个类中,这样加入日后有点模块需要单独做成静态库的话,就会很方便

19.总体来说,但凡是需要反复使用的东西,尽量做缓存操作,这应该算是一种思想吧

20. 写一个app的网络接口的URL 获取类, 专门获取 每一个请求的URL,所有的请求 也可以写到一个配置文件中,使用block 传递参数,之所以不分散到每个DataController 中,是为了减少代码的重复,除非有父子关系的控制器 可以在DataController 中 包含儿子的DataController,为的就是解耦,在接口配置文件中 不需要的接口 要及时标注,

举例说明: 比方说 有一个可获取行业的控制器A,写了一个DataController 获取行业数据,现在又有了一个新的控制器B,里边有别的业务,但是也需要获取行业数据,按照平时 可能在这个新的控制器的DataController 拥有 行业控制器A的DataController 然后获取数据就行了 ,但是,如果,以后的业务用不到这个A 的时候, 但是B要存在, 就不能删除A,这就是上边解释的 耦合性的问题。

21. AVFoundation  视频播放有一个缓存播放的功能没有加,这个需要研究HTTPServer 后,加入这个功能 ,有很多任务需要完成,感觉时间不够用,

在解读完YYModel 后,研究HTTPServer 源代码,

22.在swift 中如果有一个对象必须遵守某一个或多个协议的写法是这样的

override func httpResponseForMethod(method: String!, URI path: String!) -> protocol<NSObjectProtocol, HTTPResponse>!

- (NSObject<HTTPResponse> *)httpResponseForMethod:(NSString *)method URI:(NSString *)path

23. 在开发中设计到对网络的封装应该假想成SDk这样的模式,业务成调用网络接口应该像调用framework一样,根本不知道URL和内部细节,具体实现是应该通过一个Client类来输出所有的网络请求

24. __Require_Quiet 类似这样宏的使用

导入头文件#import <AssertMacros.h>

可以看出,通过调用这个宏可以跳转到代码的某个地方,_out 是一个标记,如果条件为空,就会跳到我们打标记的地方。

__Require_noErr_Quiet  如果发生异常,就跳转到标记的地方

25. 关于开发中函数的函数的使用问题

当一个字段能够标示好几种情况时,我们就应该考虑使用枚举进行封装

比如iscontain 这个字段 0代表不能加载 1代表可以加载 2代表已添加  3代表已过期

我们封装成枚举是这样的

typedef NS_ENUM(NSUInteger, MyAppStatus) {
MyAppStatusDisable,
MyAppStatusEnable,
MyAppStatusAdded,
MyAppStatusExpired,
};
@property (nonatomic,copy)NSString *iscontain;
@property (nonatomic,assign,readonly)MyAppStatus appStatus;

因为是只读的,实现getter方法

- (MyAppStatus)appStatus {

    // 根据iscontain这个资环获取app状态
// 0代表不能加载 1代表可以加载 2代表已添加 3代表已过期
switch (self.iscontain.integerValue) {
case :
return MyAppStatusEnable;
break;
case :
return MyAppStatusAdded;
break;
case :
return MyAppStatusExpired;
break;
default:
return MyAppStatusDisable;
break;
}
}

在使用中我们写一个函数,有点类似c中的函数,则也算是一种思想,可以理解为私有函数,这样把他们方法一个文件的头部,更加容易查看

// 根据状态获取要显示的字符串
static NSString * getButtonStrWithAppStatus(MyAppStatus status) { NSString *str; switch (status) {
case MyAppStatusEnable:
str = [QKYStringHelper localStringNamed:@"Add"];
break;
case MyAppStatusAdded:
str = [QKYStringHelper localStringNamed:@"Added"];
break;
case MyAppStatusExpired:
str = [QKYStringHelper localStringNamed:@"Expired"];
break;
default:
str = [QKYStringHelper localStringNamed:@"Unauthorized"];
break;
} return str;
}
_buttonStr = getButtonStrWithAppStatus(app.appStatus);

26.

tasks = [@[dataTasks, uploadTasks, downloadTasks] valueForKeyPath:@"@unionOfArrays.self"];
这么使用之前确实不太知道,如果是我,可能就直接赋值给数组了。那么`@unionOfArrays.self`又是什么意思呢?

* @distinctUnionOfObjects 清楚重复值
* unionOfObjects 保留重复值

IOS 开发中要注意的事项的更多相关文章

  1. GIT在iOS开发中的使用

    前言 在iOS开发中,很多公司对项目的版本控制管理都使用了git,当然也有部分公司使用的是svn.当年我最初接触的是svn,觉得使用起来挺方便的,但是每次切分支都需要下载一份新的代码起来,这实在太麻烦 ...

  2. iOS 开发中常见的设计模式

    最近有小伙伴问到在iOS开发中的几种设计模式,这里摘录一下别人的总结(因为已经感觉总结得差不多了,适用的可以阅读一下) 首先是开发中的23中设计模式分为三大类:1.创建型 2.结构型 3.行为型 (i ...

  3. iOS开发中遇到的一些问题及解决方案【转载】

    iOS开发中遇到的一些问题及解决方案[转载] 2015-12-29 [385][scrollView不接受点击事件,是因为事件传递失败] // //  MyScrollView.m //  Creat ...

  4. IOS开发中数据持久化的几种方法--NSUserDefaults

    IOS开发中数据持久化的几种方法--NSUserDefaults IOS 开发中,经常会遇到需要把一些数据保存在本地的情况,那么这个时候我们有以下几种可以选择的方案: 一.使用NSUserDefaul ...

  5. 【swift,oc】ios开发中巧用自动布局设置自定义cell的高度

    ios开发中,遇到自定义高度不定的cell的时候,我们通常的做法是抽取一个frame类,在frame类中预算好高度,再返回. 但是苹果出来自动布局之后...春天来了!!来看看怎么巧用自动布局设置自定义 ...

  6. 再续iOS开发中的这些权限

    前言 上篇文章iOS开发中的这些权限,你搞懂了吗?介绍了一些常用权限的获取和请求方法,知道这些方法的使用基本上可以搞定大部分应用的权限访问的需求.但是,这些方法并不全面,不能涵盖住所有权限访问的方法. ...

  7. iOS开发中权限再度梳理

    前言 上篇文章iOS开发中的这些权限,你搞懂了吗?介绍了一些常用权限的获取和请求方法,知道这些方法的使用基本上可以搞定大部分应用的权限访问的需求.但是,这些方法并不全面,不能涵盖住所有权限访问的方法. ...

  8. 总结iOS开发中的断点续传那些事儿

    前言 断点续传概述 断点续传就是从文件赏赐中断的地方重新开始下载或者上传数据,而不是从头文件开始.当下载大文件的时候,如果没有实现断点续传功能,那么每次出现异常或者用户主动的暂停,都会从头下载,这样很 ...

  9. iOS开发中静态库之".framework静态库"的制作及使用篇

    iOS开发中静态库之".framework静态库"的制作及使用篇 .framework静态库支持OC和swift .a静态库如何制作可参照上一篇: iOS开发中静态库之" ...

随机推荐

  1. css制作对话框

    当你发现好多图都能用css画出来的时候,你就会觉得css很有魅力了.//我是这么觉得的,先不考虑什么兼容问题 像漫画里出现的对话框,往往都是一个对话框然后就加入一个箭头指向说话的那一方,来表示这个内容 ...

  2. SQL语句经典大全

    一.基础 1.说明:创建数据库 CREATE DATABASE database-name  2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- ...

  3. Servant:基于Web的IIS管理工具

    Servant for IIS是个管理IIS的简单.自动化的Web管理工具.安装Servant的过程很简单,只要双击批处理文件Install Servant Service.bat,然后按照屏幕上的说 ...

  4. APK瘦身记,如何实现高达53%的压缩效果

    作者:非戈@阿里移动安全 1.我是怎么思考这件事情的 APK是Android系统安装包的文件格式,关于这个话题其实是一个老生常谈的题目,不论是公司内部,还是外部网络,前人前辈已经总结出很多方法和规律. ...

  5. JSON and Microsoft Technologies(翻译)

    本文翻译CodeProject(链接)上的一篇文章,文章对JSON的概念以及它在微软一些技术中的应用起到了非常好的扫盲作用,总结得非常好,适合初学者. 目录 介绍 什么是JavaScript对象? 实 ...

  6. 玩转Windows服务系列——Windows服务启动超时时间

    最近有客户反映,机房出现断电情况,服务器的系统重新启动后,数据库服务自启动失败.第一次遇到这种情况,为了查看是不是断电情况导致数据库文件损坏,从客户的服务器拿到数据库的日志,进行分析. 数据库工作机制 ...

  7. 跟vczh看实例学编译原理——一:Tinymoe的设计哲学

    自从<序>胡扯了快一个月之后,终于迎来了正片.之所以系列文章叫<看实例学编译原理>,是因为整个系列会通过带大家一步一步实现Tinymoe的过程,来介绍编译原理的一些知识点. 但 ...

  8. 跟vczh看实例学编译原理——零:序言

    在<如何设计一门语言>里面,我讲了一些语言方面的东西,还有痛快的喷了一些XX粉什么的.不过单纯讲这个也是很无聊的,所以我开了这个<跟vczh看实例学编译原理>系列,意在科普一些 ...

  9. ASP.NET MVC 从零开始 - 自动化部署(其二)

    这篇文章是从我的 github 博客 http://lxconan.github.io 导入的. 这是这个系列的第五篇了,前四篇请参见: ASP.NET MVC 从零开始 – Create and R ...

  10. pl/sql里的exists和in的差别

    项目中有个需要需要如下pl/sql(数据库是MariaDB) ) AS small FROM cmp_ent_main a WHERE createTime<'2016-9-21' ,,) ) ...