IOS开发经验分享

一些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代码  

  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.

Objective c代码  

  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开发经验分享,布布扣,bubuko.com

时间: 2025-01-17 08:00:17

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

iOS开发经验分享:UITableViewCell复用问题

很多朋友觉得UITableViewCell复用问题很难处理,百思不得其解,甚至有很多朋友自己琢磨很久也不明白个究竟.现在分享一下个人的一些经验,希望对大家有帮助,如果有好的意见或者有不同的看法也可以提出来,让我们一起分享一起进步,知识只有在分享的情况下才能实现它的最大价值.好了,废话少说,直奔主题了.列举两个场景对比一下,也许tableviewcell的复用就很清晰明了了.本文来自于无限互联的学员. 例1: - (UITableViewCell *)tableView:(UITableView

iOS社交分享Twitter、Facebook、复制到剪切板、LINE、及邮件

准备 首先要引进如下三个framework: MessageUI.framework Social.framework Accounts.framework 并在实现这几个方法的地方引入以下几个头文件 #import <MessageUI/MFMailComposeViewController.h> #import <Social/Social.h> #import <Accounts/Accounts.h> Twitter及Facebook 其中urlStr为我分享的

十八年开发经验分享(07)递归程序设计

这篇谈谈递归程序设计的问题.从取名上来说是想刻意区别内容的侧重点不同.上一篇是构造,其重点是从递归程序的自身结构出发,试图用一种比较直观的方法来完成递归程序的构造.这篇的重点是设计,其中的区别在于,这次是从问题本身的结构出发来完成递归程序的开发任务.上一篇中介绍的方法,比较简单直观,八股文的意味非常浓郁,并且还有一个比较大的缺点,那就是在实际使用时往往会受制与方法本身而不能解决有一定难度的问题.实际上递归是一种客观存在的现象,递归的描述问题是对客观世界的一种认识.本文从对问题的认识,描述和分析这

开发经验分享(一)

开发经验分享系列文章主要记录工作实际项目中遇到的问题和解决办法,希望能对大家有参考意义. 一.芯片的地址分配和变量地址的指定 芯片的存储区很小,所以要合理利用存储区,在进行地址空间的分配时就需要一定的技巧. 在进行开发时,一定要做好地址的划分. 比如CODE区的0x0000~0x8000作为COS区,接下来的0x8000~0x10000作为文件系统区,依次类推…… 在定义变量的时候,也要注意定义在了什么位置,占用的空间有多大. 比如,我们在XRAM区定义变量和数组: xdata char tem

iOS 开发经验总结

iOS 开发经验总结http://www.cocoachina.com/ios/20170216/18699.html 1.cocoa pods 常用的framework 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 platform :ios, '7.0' target 'store' do pod 'AFNetworking', '~> 3.1.0' pod 'JSONKit', '~> 1.5pre' pod 'MBPr

Android开发经验分享-GridView、ListView内容错乱

在使用GridView.ListView的过程中遇到内容错乱的问题,费了较长时间才找到问题的根源,特地总结一下. 1.在自定义adapter中没有给每一项都设置内容导致内容错乱: @Override public View getView(final int position, View convertView, ViewGroup parent) { if( null == convertView ){ mGridHolder = new GridHolder( ); convertView

在智能电视中的实时数据呈现web开发经验分享

先上图,一睹为快. 看到图,身为资源web开发者的你,是不是在大脑中闪现出了一个个的技术名词,websocket.html5.css3(animation/transition).javascript(ajax/setTimeout/setInterval). 同样专注web开发xx年的你,有没有考虑到以下问题: 1.实时数据展现,如果采用ajax定时拉取对现有业务的影响,在DB性能这块,可能导致DB服务死去 2.采用客户端主动拉取还是服务器端的推技术,服务器推技术似乎实现起来太多麻烦,后端的配

ios facebook 分享

https://developers.facebook.com/docs/ios/share/cn https://github.com/fbsamples/ios-howtos https://developers.facebook.com/docs/ios/getting-started ios6以后 http://stackoverflow.com/questions/18459252/how-to-post-on-twitter-by-hiding-slcomposeviewcontro

iOS 6分享列表——UIActivityViewController详解

iOS 6分享列表——UIActivityViewController详解 2013-06-03 01:42:33     发表评论 在iOS 6之后提供了一个分享列表视图,它通过UIActivityViewController管理.苹果设计它主要的目的是替换分享动作选单(ActionSheet),分享动作选单是出于分享目的的动作选单. 通过动作选单上的选择按钮,可以把图片分享给别人.但是随着iOS功能的不断增加,需要分享的内容越来越多,它会以模态视图方式呈现.iPad设备的分享列表,它会以Po