一些IOS开发的心得:

1) [Multiple Threads] IOS多线程注意, 所有的UI操作都必须在主线程上:

Any code that will update the UI should be done on the main thread. Data loading should typically be done in some background thread.

示例: [self performSelectorOnMainThread:@selector(updateThumbnail:) withObject:tmpImg waitUntilDone:false];

2) [Design] Three20是个重量级的框架,差不多是自己重新实现了IOS的UI组件, 使用需谨慎!

3) [Design] Single UIViewController or Mutiple UIViewController, need think~

4) [UI] 获取ipad/iphone的当前方向:

  1. UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
  2. if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown) {
  3. ... ...
  4. } else {
  5. ... ...
  6. }

5) [Memory Management] Release a variable and set it to nil is a good habit.

  1. // 在viewDidLoad中alloc或者new的对象空间需要在这边释放
  2. - (void)viewDidUnload {
  3. [_sushiTypes release];
  4. _sushiTypes = nil;
  5. }
  6. - (void)dealloc {
  7. [_sushiTypes release];
  8. _sushiTypes = nil;
  9. [super dealloc];
  10. }

http://www.raywenderlich.com/2657/memory-management-in-objective-c-tutorial 写道

Note that you also set the object to nil afterwards. This is a good practice, because by setting it to nil it avoids a lot of problems. Any time you call a method on a nil object, it does nothing, but if you don’t set it to nil, if you tried calling a method on a deallocated object your program should crash.

6) [Other] #import and @class declaration usage

http://stackoverflow.com/questions/322597/class-vs-import/1350029#1350029 写道
Three simple rules: * Only #import the super class in header files. * #import all classes you send messages to in implementation. * Forward declarations for everything else. If you do forward declaration in the implementation files, then you probably do something wrong.

7) [UIWebView] UIWebView 和 应用之间的交互

http://stackoverflow.com/questions/3738212/getting-objective-c-to-talk-to-javascript-with-uiwebview/3738235#3738235 写道
You can send data from the Cocoa layer to the JavaScript layer by using the stringByEvaluatingJavaScriptFromString: method in UIWebView.
The Cocoa layer can also "intercept" link clicks by implementing the UIWebViewDelegate protocol in your view controller; when a link is clicked, the delegate method webView:shouldStartLoadWithRequest:navigationType: will be called, at which point the Cocoa layer can do the kind of "pop-up" action you're looking for.
(Although I would ask you why you want to generate pop-ups like this. My gut feeling tells me that this will look and feel quite annoying from the user's point of view.)

8) [UI]  A great article for Popoverview usage

http://mobiforge.com/designing/story/using-popoverview-ipad-app-development

9) [Design] 由于UI操作是非线程安全的(需要在主线程上执行), 尽量减少异步的UI操作. 如果界面比较复杂可以考虑使用UIWebView

10) [Tip] Good posts to solve library sharing between multiple osx/ios projects.

http://zetetic.net/blog/2010/02/15/building-static-libraries-to-share-code-on-iphone-and-mac-os-x-projects/

ios和osX之间可以重用的代码

使用c编写Android和IOS共享代码的可行性

11) [Tip] IOS weak link frame for multiple sdk compatibility

http://stackoverflow.com/questions/2627797/weak-link-framework/2629693#2629693 写道
You are getting that error because you are building against a version of the SDK that does not implemement the MessageUI framework.
What you need to do is to build for iPhone OS 3.0, but in the build settings for your target set the iPhone OS Deployment Target to iPhone OS 2.0 (or whatever minimum version you'd like to support with your final application). This way, you weak-link against the newer framework, but can still deploy the application to older devices.

11) [UI] 让UIWebView支持Gesture

http://justinimhoff.com/swipe-gesture-with-uiwebview/

12) [UI, Tip] 在按钮上排列文字的图片的位置

Set the imageEdgeInset  and titleEdgeInset  to move the components around within your image.

http://stackoverflow.com/questions/2515998/iphone-uibutton-image-position/2516108#2516108

13) [UI Layout] 动态布局的一个很好的例子

Three20: TTStyledLayout.m

- (void)layoutText:(TTStyledTextNode*)textNode container:(TTStyledElement*)element {

以后陆续补充~

14) [UI TabBar] RaisedCenterTabBar

http://idevrecipes.com/2010/12/16/raised-center-tab-bar-button/

https://github.com/boctor/idev-recipes/tree/master/RaisedCenterTabBar

15) [Error] “wait_fences: failed to receive reply: 10004003”?

在viewDidAppear之前改变view上的元素

16) [Grammar] @synthesize and @dynamic

@synthesize will generate getter and setter methods for your property. @dynamic just tells the compiler that the getter and setter methods are implemented not by the class itself but somewhere else (like the superclass)

17) 尽量避免在viewDidLoad中使用alloc生成新的对象,如果有者需要在viewDidUnload中release;由于memory warning发生时候会触发viewDidUnload,因此viewDidLoad会被多次调用

---- 在viewDidLoad中alloc, 然后在viewDidUnload中release是比较正确的内存管理方式。针对这种情况需要在viewDidLoad中回复view的状态,所以也就需要使用一个数据模型记录view的状态。

IOS开发经验分享的更多相关文章

  1. iOS 6分享列表——UIActivityViewController详解

    iOS 6分享列表——UIActivityViewController详解 2013-06-03 01:42:33     发表评论 在iOS 6之后提供了一个分享列表视图,它通过UIActivity ...

  2. iOS开发经验总结——基础工程

    iOS开发经验总结--依赖库 这篇博客,我想说一下开发中经常遇到的一个问题,虚拟个场景描述一下的话,应该是这样的. 项目经理:今天我们正式开始一个新项目,iOSer你负责把苹果端的APP完成,有没有问 ...

  3. iOS 开发经验总结

    iOS 开发经验总结http://www.cocoachina.com/ios/20170216/18699.html 1.cocoa pods 常用的framework 1 2 3 4 5 6 7 ...

  4. Nuxt开发经验分享

    Nuxt开发经验分享 本文章基于starter-template模板进行讲解,面向有vue-cli开发经验的宝宝 vue init nuxt-community/starter-template   ...

  5. vue history模式 ios微信分享坑

    vue history模式 ios微信分享坑 问题分析:因为苹果分享会是调取签名失败是因为:苹果在微信中浏览器机制和安卓不同,有IOS缓存问题,和IOS对单页面的优化问题,通俗点说安卓进行页面跳转分享 ...

  6. ios微信分享的兼容性问题

    我微信分享采用的是: 页面初始化时动态加载js-sdk, 然后在需要分享的页面进行sdk的分享初始化 app.vue store.vue 这种方法在安卓上完全正常, 好用得令人发指, 但是!!! io ...

  7. 钱包开发经验分享:ETH篇

    # 钱包开发经验分享:ETH篇 [TOC] ## 开发前的准备 > 工欲善其事,必先利其器 一路开发过来,积累了一些钱包的开发利器和网站,与大家分享一下.这些东西在这行开发过的人都知道,只是给行 ...

  8. 【Meetup回顾】Apache DolphinScheduler在联通的实践和二次开发经验分享

    在由 openLooKeng 社区主办,Apahce DolphinScheduler社区.Apache Pulsar 社区.示说网协办的联合 Meetup 上,来自联通数字科技的王兴杰老师分享了Do ...

  9. 百度地图 IOS版开发经验分享

    最近刚完成app中地图的应用,感觉非常的曲折,折腾了很久,刚才开始一直不能成功使用百度地图api,报一大堆的错误,后来换到高德地图,又发现服务端使用的百度的经纬度,又从高德换回百度,泪奔. 这里简单比 ...

随机推荐

  1. Oracle10GODP连接11G数据库,出现ORA - 1017用户名/口令无效; 登录被拒绝 的问题

    一.出现症状 1.使用sqlplus连接正常 2.C#使用10g的ODP.NET连接时,报上面的错误 二.原因 1.Oracle11G之前密码是不区分大小写的,从11G开始默认密码区分大小写 2.使用 ...

  2. 5059 一起去打CS

    5059 一起去打CS  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 早就和lyk约好了去 ...

  3. MyContentProvider

    package com.example.shad_fnst.mycontentprovider; import android.app.Activity; import android.content ...

  4. MySQLdb模块安装-win环境

    原帖地址:http://blog.csdn.net/wklken/article/details/7253245 使用python访问mysql,需要一系列安装 linux下MySQLdb安装见  P ...

  5. vpn连接成功后,本地无法连接外网

    把在远程网络上使用默认网关前面的对勾取消掉,确定就ok啦...

  6. python简单爬虫编写

    1.主要学习这程序的编写思路 a.读取解释网站 b.找到相关页 c.找到图片链接的元素 d.保存图片到文件夹 ..... 将每一个步骤都分解出来,然后用函数去实现,代码易读性高. ##代码尽快运行时会 ...

  7. MiZ702学习笔记12——封装一个普通的VGA IP

    还记得<MiZ702学习笔记(番外篇)--纯PL VGA驱动>这篇文章中,用verilog写了一个VGA驱动.我们今天要介绍的就是将这个工程打包成一个普通的IP,目的是为后面的一篇文章做个 ...

  8. [javascript|基本概念|Boolean]学习笔记

    Boolean类型的值:true/false ECMAScripe所有类型的值都有与这Boolean值等价的值 将一个值转换为其对应的Boolean值,可调用转型函数Boolean(),返回的值取决于 ...

  9. JVM内存分配

    内存分配:当JVM运行起来的时候就会给内存划分空间,那么这块空间称之为运行时数据区.(备注:当一个Java源程序编译成class字节码文件之后,字节码文件里存放的都是二进制的汇编命令,当程序运行的时候 ...

  10. Difference between ref and out parameters

    Original link: http://www.dotnet-tricks.com/Tutorial/csharp/K0Hb060414-Difference-between-ref-and-ou ...