一些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的当前方向:
- UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
- if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown) {
- ... ...
- } else {
- ... ...
- }
5) [Memory Management] Release a variable and set it to nil is a good habit.
- // 在viewDidLoad中alloc或者new的对象空间需要在这边释放
- - (void)viewDidUnload {
- [_sushiTypes release];
- _sushiTypes = nil;
- }
- - (void)dealloc {
- [_sushiTypes release];
- _sushiTypes = nil;
- [super dealloc];
- }
http://www.raywenderlich.com/2657/memory-management-in-objective-c-tutorial 写道
6) [Other] #import and @class declaration usage
7) [UIWebView] 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.
11) [Tip] IOS weak link frame for multiple sdk compatibility
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的状态。