標籤:android des style blog http java
一些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的當前方向:
Objective c代碼
- 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.
Objective c代碼
- // 在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 寫道
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的狀態。