做完了项目,想总结下,不知如何写适合,只列出一些iOS开辟的根基点,开辟前因为不知道这些点,招致走了一些弯路,欲望对初学者有帮助。
在这里我还是要推荐下我自己建的iOS开发学习群:680565220,群里都是学ios开发的,如果你正在学习ios ,小编欢迎你加入,今天分享的这个案例已经上传到群文件,大家都是软件开发党,不定期分享干货(只有iOS软件开发相关的),包括我自己整理的一份2018最新的iOS进阶资料和高级开发教程,欢迎进阶中和进想深入iOS的小伙伴。
根基篇
为甚么对一个变量release后还要设为nil
对一个变量release后,这个变量指向的内存释放了,但这个变量本身没变,仍指向本来的内存地址。若这个变量在释放后被拜候,或许被反复release,就会招致应用解体。设为nil后这个变量指向0×00,可以包管法度典型此后拜候不到本来的内存地址,对nil遏制release也没任何结果。
应用类成员时,前面加不加self.有甚么差别
不加self.调用的是成员本身,加self.后实践上调用了其成员的get set编制。
例:
@property(nonatomic,retain)NSString*name
//.m
name=@"bang"//没有retain,随时会被释放
NSString*str=self.name//等于NSString *str = [self name];
self.name=@"bang"//等于[self setName:@"bang"]; 这时候在set编制里retain了这个字符串
身手篇
内存泄漏
可以经过过程xcode的编译对象Product-Analyze检讨函数块范围内可以或许的泄漏点(外带会提示一些可以或许有的缺点)。
用leaks对象监测出来的泄漏查找编制是跟踪其代码提示中呈现的变量,常常这个变量是在提示的调用客栈以外的处所泄漏的。若其实查不到,终究编制是重写这个变量的retain和release编制,debug,从调用客栈看是谁retain了它而没有release。
要寄望的是,用CFXXCreate(例如CFArrayCreate)生成的变量要用CFRelease释放。
数据存储
如无搜刮需要,可以将一个数据对象直接序列化后存到sqlite,取出时直接反序列化为对象应用。序列化需要数据类完成NSCoding和谈,完成encodeWithCoder和initWithCoder两个别例就行,如有多个数据对象,可以写个基类完成这两个别例,并在这外面应用反射列举本身一切变量去encode和decode,一日千里,具体完成网上找找就有了。
组件篇
UINavigationController头尾显示埋没
在用NavigationController去办理view的push和pop时,需要根据不合的view设置可否显示NavigationBar和ToolBar,一末尾在缺点的处所设置了,招致有时该显示NavigationBar和ToolBar时不显示的状况,后来发此刻viewWillAppear上设置万无一掉落。别笑我土鳖,没好好去知道它全数流程,一贯没发现。
C
1
2
3
4
5
-(void)viewWillAppear:(BOOL)animated{
[superviewWillAppear:animated];
[self.navigationController setToolbarHidden:NO];
[self.navigationController setNavigationBarHidden:NO];
}
UITableView游标式衬着
tableView的机制大年夜大年夜概是:先定好总行数,某一行滚入视图范围时,回调一个函数去取view出来显示。这一行滚出视图再滚入时仍会继续回调这一函数取view。有多么的机制就是说不管你table里的数据有若干,都可以全数放入table中不消分页,因为不消一次性把所罕见据都取出来,只在需要显示的时辰根据游标去取对应的数据就好了。
可以或许这是APP组件很天然的编制不消诠释,但在web上页面上的数据和元素都是要一次性载入内存的,做久了web,一末尾没想到它多么的完成机制,招致我们走了很多弯路。
UIWebView衬着范围
UIWebView不是根据可视范围决定每次的衬着范围,而是根据本身控件的frame大年夜大年夜小决定。
曾查验查验webview嵌在tableview里,为了让webview跟tableview一路动弹,把webview的大年夜大年夜小设为webview里的内容大年夜大年夜小,让webview不出动弹条,从而能跟着tableview的动弹条一路滚。多么做的成果是每次webview都一次性衬着全数页面,内存占用多机能很差,并且在缩小大年夜增加这个webview时,衬着缩小大年夜的全数页面更吃力,呈现不克不及忍耐的机能。措置编制是让webview定住高度为一整屏iphone的高度,限制了webview每次的衬着范围为可视范围,机能大年夜大年夜好。带来的结果是没法随tableview动弹,但可以以其他编制优化体验。比来看到新版的ZAKER也是多么做的。
小我感应篇
界面布局调剂异常费事,让人忖量web了。界面刻画编制XIB感应流利难学,至今不会,没有CSS+HTML来得便当。
有编译器把关,少了像写js时多写or写错一个字符查半天的结果。
Object-C写起来各类变量函数和变量调用很长,没有js的短小精壮来得爽。
第一次编写触及手动内存办理的法度典型,挺成心思,没想象中难,但有些内存办理招致的bug很难查。
当然APP不像web那样随时更新,但也不像传统PC客户端进级那么费事,用户更新自愿更强,照样适合快速迭代的。
细节是可以决定成败,但得看你把甚么定成细节。
最后,0 bug的法度典型不存在,极致是把最首要的事做好。done is better than perfect。