IOS 开发中要注意的事项

时间:2022-09-22 11:43:01

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>

IOS 开发中要注意的事项

可以看出,通过调用这个宏可以跳转到代码的某个地方,_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开发中静态库之&quot&semi;&period;framework静态库&quot&semi;的制作及使用篇

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

随机推荐

  1. C&num;学习笔记-数据的传递(公共变量)以及Dictionary

    看的代码越多,写的代码越多,就越是享受这些字符,终于渐渐懂得了那种传闻中的成就感,特别是自己从看不懂然后一步一步学,一个代码一个代码地敲,最后哪怕只是完成了一个小功能,也都是特别自豪的!这种自豪不用告 ...

  2. 启动PPT的时候一直配置vs2013的问题解决

    前几天装了VS2013,结果发现每次启动powerpoint都要配置vs2013,虽然时间花的不多,可我看的就是碍眼,我都想把VS2013卸载来解决了.后来抱着试下的态度竟然在google上找到了解决 ...

  3. springmvc自定义日期编辑器

    1.控制器 @Controller public class MyController { // 处理器方法 @RequestMapping(value = "/first.do" ...

  4. A Tour of Go Forever

    If you omit the loop condition it loops forever, so an infinite loop is compactly(简洁地:紧密地:细密地) expre ...

  5. Big Event in HDU(杭电1171)(多重背包&rpar;和(母函数)两种解法

    Big Event in HDU Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  6. 扩展ToolBarManager、ListView和Grid控件以实现气球式的ToolTip

    原文:扩展ToolBarManager.ListView和Grid控件以实现气球式的ToolTip infragistics是全球领先的UI工具和用户体验的专家,Infragistics开发了一系列的 ...

  7. 某电商网站线上drbd&plus;heartbeat&plus;nfs配置

    1.环境 nfs1.test.com 10.1.1.1 nfs2.test.com 10.1.1.2 2.drbd配置 安装drbd yum -y install gcc gcc-c++ make g ...

  8. c语言的枚举(遍历枚举)与数据类型总结

    一.枚举的概念 枚举是C语言中的一种基本数据类型,并不是构造类型,它可以用于声明一组常数.当一个变量有几个固定的可能取值时,可以将这个变量定义为枚举类型. 比如,你可以用一个枚举类型的变量来表示季节, ...

  9. 【阿里聚安全&&num;183&semi;安全周刊】互联网时代人类还有被遗忘的权利吗 &vert; Android与中兴

    本周七个关键词:互联网时代丨中兴和Android丨安卓厂商和安全补丁丨移动支付安全丨泰国移动运营商泄密丨格式化硬盘的恶意程序丨代码签名滥用 -1-   [互联网] 互联网时代 人类还有被遗忘的权利吗 ...

  10. mysql统计一年12月的数据

    效果图: select end) as 一月份, end) as 二月份, end) as 三月份, end) as 四月份, end) as 五月份, end) as 六月份, end) as 七月 ...