IOS开发笔记

此贴会经常更新添加新内容,敬请关注!

首先给出iOS开发常用开源代码和第三方库:http://www.cocoachina.com/applenews/devnews/2013/0128/5622.html

视频分享:

http://www.lanrenios.com/tutorials/basic/2012/1218/630.html

http://www.lanrenios.com/tutorials/basic/2013/0121/806.html

这是一个大神的博客,可以多多学习:http://geeklu.com/

修改appid 信息:appleid.apple.com

苹果开发者支持中心:40067108551

1、获取info.plist文件内容,名称/版本号......

NSDictionary*progectInfo = [[NSBundlemainBundle]infoDictionary];

NSString*idst = [progectInfoobjectForKey:@"CFBundleIdentifier"];      // 获取应用标识

Dlog(@"%@", idst);

2、NSLog宏定义

#ifdef DEBUG

#define Dlog(format, ...) NSLog(format, ##__VA_ARGS__)

#else

#define Dlog(format, ...)

#endif

3、UIImageView之上的UIButton默认是不触发事件的,加入一行代码搞定:

UIImageView*bgView = [[UIImageViewalloc]initWithImage:[[UIImageimageNamed:@"sdf"]autorelease]];bgView.userInteractionEnabled=YES;

4、设置视图不支持横屏显示,修改info-plist文件,直接上图:

5、相册照片选中后可以编辑大小/移动位置,修改选择器:

imagePicker.allowsEditing=YES; 接着在代理方法中这样获得修改后的照片: UIImage*editedImage = [infoobjectForKey:UIImagePickerControllerEditedImage];

6、当我们的应用需要支持中文国际化时,比如打开相册,菜单都是中文的.可以在PROJECT下添加,添加中文支持后infoPlist.strings会自动添加一个中文的空文件,直接上图:

7、(1)显示Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles YES

隐藏Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles NO

操作完之后要强制退出Finder并从新启动。

(2)MAX删除文件夹下的所有.svn文件

打开终端应用;将准备删除的文件夹拖拽到终端,得到该文件夹的绝对路径;

cd  刚才得到的路径,进入该文件夹;

执行  rm -rf `find . -type d -name .svn` 命令;

注意这个符号 : “  `  ” ,在mac下先按 fn 键 再按 esc 下面的哪个键; 或则直接拷贝上面的命令

8、程序停止/间隔执行:

(1)sleep(300);

(2)(1)[NSThread sleepForTimeInterval:5.0];

(3)[selfperformSelector:@selector(startupview)withObject:nilafterDelay:3];

9、隐藏iPhone通知栏

(1)application.statusBarHidden=YES;

(2)可以修改info.plist文件:

10、标签栏默认高度是48宽度152(四个菜单时),TabBarItem的图片尺寸是30X30,这个应该是带字的,不带字@2x应该是44比较好看,导航栏

/UISegmentedControl / 工具栏 / uitableviewcell的默认高度都是44,状态栏默认高度是20.

11、UINavigationController和UITabBarController都是容器控制器,别打算给他们或他们的子类直接添加标题等操作。

12、导航栏在不同的视图控制器中隐藏和出现时会有黑色的条闪现,解决方法:[self.navigationControllersetNavigationBarHidden:YESanimated:YES]; 不要用传统的这个属性设置self.navigationController.navigationBarHidden = YES。

13、今天遇到一个很有趣的问题,花费了近一个小时才搞定。当我们用UINavigationController压入普通视图控制器显示UIWebView时,网页由于UINavigationBar的高度无法通过滑动完全显示,意思就是当我把页面滑动到最低部网页还是不能完全显示,问题就出在导航栏的高度影响了。解决方案很怪异,我设置了UIWebView的高度减去导航栏高度就ok了,代码如下:

CGRectrect = [UIScreenmainScreen].bounds;

_uiWebView= [[UIWebViewalloc]initWithFrame:CGRectMake(0,0, rect.size.width, rect.size.height-60)];

14、AudioServicesPlaySystemSound(1013);  调用系统铃声。(1013只是其中一个声音)

AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);  调用系统震动

15、Unbalanced calls to begin/end appearance transitions for......这种错误是某个视图在切换时,动画没有结束又有新的动画即将开始,所以就出问题了,解决办法之一是去掉动画。比如[self.navigationControllerpushViewController:zbarReaderanimated:NO]; 不用YES;

16、UILabel和UITextField,UITextView区别

UILabel 显示的文本只读,无法编辑,可以根据文字个数自动换行;

UITextField 可编辑本文,但是无法换行,只能在一行显示;当点击键盘上的return时会收到一个事件做一些事情

UITextView 可编辑文本,提供换行功能。textView.layer.cornerRadius=10;//设置圆角

其实这些控键是否可编辑,自己可以手动设置。

17、ios编辑框隐藏键盘

(1)点击编辑区域外隐藏键盘

UITapGestureRecognizer*tapGr = [[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(dismissKeyBoard)];

tapGr.cancelsTouchesInView=NO;

[self.navigationController.navigationBaraddGestureRecognizer:tapGr];

(2)键盘上面添加隐藏按钮

UIToolbar* topView = [[UIToolbaralloc]initWithFrame:CGRectMake(0,0,320,30)];

[topViewsetBarStyle:UIBarStyleBlackTranslucent];

UIBarButtonItem* doneButton = [[UIBarButtonItemalloc]initWithTitle:@"隐藏键盘"style:UIBarButtonItemStylePlaintarget:selfaction:@selector(dismissKeyBoard)];

NSArray* buttonsArray = [NSArrayarrayWithObjects:doneButton,nil];

[topViewsetItems:buttonsArray];

[textViewsetInputAccessoryView:topView];

18、当需要一次创建很多个UILabel或者其他控键,如果他们的坐标是有规律可循,就用循环创建。目前苹果没有提供一次创建多个属性相同标题不同的控键。

19、iOS开发之去除icon图标特效,阴影、反光

添加一个Icon already includes gloss effects并选择yes,然后icon位置Prerendered搭钩如下图:

20、当UITextField的内容左对齐时太靠近左边怎么办?我们可以利用分类机制重写UITextField的自带方法:

新建文件名字叫UITextFieldCategory.h / .m共两个文件

.h内容如下:

@interfaceUITextField (textMath)

- (CGRect)editingRectForBounds:(CGRect)bounds;

- (CGRect)textRectForBounds:(CGRect)bounds;

@end

.m内容如下:

#import"UITextFieldCategory.h"

@implementationUITextField (textMath)

//利用分类重写UITextField的内容布局方法

- (CGRect)editingRectForBounds:(CGRect)bounds

{

returnCGRectMake(bounds.origin.x+10.0f, bounds.origin.y, bounds.size.width, bounds.size.height);

}

- (CGRect)textRectForBounds:(CGRect)bounds

{

returnCGRectMake(bounds.origin.x+10.0f, bounds.origin.y, bounds.size.width, bounds.size.height);

}

@end

21、刷新、提示、进度条实现,有第三方库非常方便MBProgressHUD,可以在github上下载,地址:https://github.com/jdg/MBProgressHUD

22、发送邮件功能可以使用SKPSMTPMessage第三方库,注册一个gmail帐号就可以直接发送邮件到你制定的邮箱(qq邮箱),需要倒入框架。

23、给iphone模拟器相册保存图片向ios模拟器里添加图片的方法不止一种,这里介绍最简单的:打开模拟器后,用电脑的 Safari 浏览网页,将需要的图片拖到 iPhone 模拟器,模拟器就会自动打开 Safari 浏览到这张图片了。此时长按图片,在弹出的对话框里选择保存就搞定了。

24、设置navigation上tablebar的barButtonItem颜色

self.navigationController.navigationBar.tintColor= [UIColorcolorWithRed:104/255green:189/255.0blue:227/255.0alpha:1];

25、创建手势之后,在执行了手势选择器后记得移出手势,特别是这个手势添加到一个其他控制器也使用到的对象上:

tapGr= [[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(dismissKeyBoard)];

[self.navigationController.navigationBarremoveGestureRecognizer:tapGr];

26、应用添加评论打分,直接进入appstore评分页面链接(只要更换id就可以了):itms-apps://ax.itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=331351772

27、点击home键,让程序再次点击时重新打开程序。在Information Property List下找到“Application does not run in background”属性,然后将这个值设置成YES。

28、ios应用右上角添加小红圈,如果值为0则去除红圆圈。[UIApplicationsharedApplication].applicationIconBadgeNumber=2;

29、多线程注意事项:

(1)UI创建和操作都在主线程执行。(2)非主线程主要执行耗时的大数据处理,或者是网络加载过程。

(3)每个线程的内存管理都由开辟内存的线程管理。

(4)次线程最好用自动内存管理池管理内存。

30、sendSynchronousRequest同步请求时,如果使用post传递参数,后台用Java接收参数,必须在客户端设置参数类型:

[requestsetValue:@"text/xml"forHTTPHeaderField:@"Content-Type"]; 如果忘记这句代码,后台是无法获取参数值的。

31、XCode中文乱码

在Mac下用普通的文本编辑器(或者用word从新保存)打开源文件,全文复制粘贴回XCode 。粘贴时提示有不可表示字符,选择重新保存成UTF-8即可。

32、部分文件设置或者取消arc机制:选中Targets--> 选择 Build Phases --> 展开Compile Sources  ,我们看到第二列的名称为:Compiler Flags双击你所要使用ARC的文件,并输入-fobjc-arc即可添加arc,如果想让使用ARC机制的代码不使用ARC机制,只需要输入-fno-objc-arc

33、CATransition移动视图或者淡入淡出效果经常对UIImageView或其他视图不其作用,此时就添加一层UIView视图,动画加到UIView上,UIImageView加到这个UIView上就OK了。

34、linker command failed with exit code 1 (use -v to see invocation),这种错误一般由两种原因造成:

(1)Target-->Build Phases-->compile Sources中缺少了某个.m文件,点击+号导入进来就可以了。

(2)Target-->Build Phases-->compile Sources中重复添加了多个相同的.m文件,删掉多余的就可以了。

35、当switch case的分支中定义了变量,就必须加大括号,否则语法错误。

36、xcode5基于iOS5.0而不是iOS7开发的话,添加百度地图SDK时报错,有个地方需要注意

37、UITextField最开始获得的textField.text时,不是@"",而是nil。被这问题搞了很长时间,郁闷啊。

38、Objective-C内存管理(iOS内存管理)

(1) IOS对象一直都在堆上(重点啊)。

(2) 方法的参数识别:带*星号的,是类指针变量,内容在堆上,不带星号的是普通局部变量在栈上。

(3) ARC中默认的指针类型就是strong。

(4) 在默认情况下,所有的实例变量(对象)和局部变量(对象)都是strong类型的。

(5) 只要某个对象被任一strong指针指向,那么它将不会被销毁。如果对象没有被任何strong指针指向,那么就将被销毁。

(6) 在ARC机制作用下,当某个对象被销毁后,所有指向这个对象的weak指针将被置为nil,weak指针没有实际指向对象。

(7) 相信无数的开发者都曾经被指针指向已释放对象所造成的EXC_BAD_ACCESS困扰过,使用ARC以后,不论是strong还是weak类型的指针,都不再会指向一个dealloced的对象,从根源上解决了意外释放导致的crash。

(8) NSString *str0 = @"abc"; 和NSString *str1 = @"abc"; 都在静态存储区存储,此时的str0和str1指针比较是相等的。

39、UIlabel自动换行,uilabel换行设置

//自动折行设置

label.lineBreakMode = UILineBreakModeWordWrap;

label.numberOfLines =0;

40、iOS系统默认可以向程序中增加最多64个本地通知,本地通知目前只能按照时分秒、年月日提示,如果想按每两天提醒一次,就麻烦了。要判断机器是不是支持本地通知,然后在为每一个通知指定一个标识,取消时会用。

41、有时应用在启动时就会闪退,请查看你的以下方法中是否添加了耗时操作,比如网络请求。

application:didFinishLaunchingWithOptions:

applicationWillResignActive:

applicationDidEnterBackground:

applicationWillEnterForeground:

applicationDidBecomeActive:

applicationWillTerminate:

上面所有这些方法,应用只有有限的时间去完成处理。如果花费时间太长,操作系统将终止应用。

42、推荐一个xcode控件KSImageNamed,KSImageNamed是一款方便填写图片文件名称的插件。支持NSImage和UIImage,当你写到[UIImage imaged:的时候,插件会把项目中的图片名称提示出来,并且还有预览功能,对经常用代码生成图片视图的童鞋十分方便。此控件使用很方便,只要打开所下载的工程然后编译通过,再退出重新打开XCODE就可以了。下载地址:https://github.com/ksuther/KSImageNamed-Xcode

43、修改navigationBar背景色和title颜色

[userCenterNC.navigationBarsetBackgroundImage:[ToolimageWithColor:UIBUTTON_BGCORLOR]forBarMetrics:UIBarMetricsDefault];

userCenterNC.navigationBar.titleTextAttributes= [NSDictionarydictionaryWithObject:[UIColorwhiteColor]forKey:UITextAttributeTextColor];

//navigationBar返回颜色

userCenterNC.navigationBar.tintColor= [UIColorwhiteColor];

44、修改状态栏为白色,在info.plist文件中添加两个属性

View controller-based status bar appearanceNO

[applicationsetStatusBarStyle:UIStatusBarStyleLightContent]; (此代码加在AppDelegate中)

45、XCODE在Macbook Pro下触摸板左右滑动不能切换界面,这个问题搞了一个钟头,所以记录一下:方法是在打开电脑的系统偏好设置——>触控板——>更多手势,选中第一项“在页面之间轻扫”并且给“两个手指左右滚动”打钩。好了这样就解决了,上图会看的更清晰。

46、XCODE开发时有个插件可以自动填充注释VVDocumenter-Xcode,使用方法先去github下载工程,接着编译成功后~/Library/Application Support/Developer/Shared/Xcode这个目录中多了一个Contents文件,里面会有个Info.plist配置文件。这时重新启动XCODE就可以使用自动注释了,在方法前输入///三个斜杠就可以了。

下载地址:https://github.com/onevcat/VVDocumenter-Xcode

47、iOS开发中有可能在程序打包前初始化很多数据,比如题库资料。上次同事给我整理了一份txt文档,里面存储的是大量的json数组,文件有3M左右,我刚开始用

[NSArray arrayWithContentsOfFile:path]读取内容,每次都返回nil,后来先给数组加了一个"key",先获取data数据,然后转成字典。data已经有数据了,但是字典还是nil。让我很郁闷,后来我看到xcode中显示的txt中文有乱码,感觉跟编码方式有关系,所以在MAC上先打开txt复制所有内容,然后粘贴到xcode,这是xcode会提示你保存的utf-8格式,点击确定,再次粘贴一下。发现xcode看到的txt都是中文。然后解析字典数据终于出来了,我内个去啊。

48、关于autolayout在故事板的应用

49、Schema->Run->Diagnostics 里面选中EnableAddressSanitizer这个选项打钩太恐怖了。

今天使用MKMapView,一打开地图内存就持续暴涨,然后上到600M左右就闪退,浪费一天时间没找出问题,最后在XCODE中把上面的勾去掉,一切就好了。

[objc]view plaincopy

print?

50、storyboard故事板使用UIScroller注意事项,在StoryBoard中使用UIScrollView一定要用下图中的这种布局,如果刚开始没想到用UIScrollView后来才想加,可以选中所有Subview然后选择Editor - Embed in - Scroll View,ContentView忘加了也可以类似操作。

如果scrollerView的高度超过屏幕高度,还想要添加控件时,设置Intrinsic Size 为 Placeholder,这样storyboard会给你展示临时的高度,运行时不会以这个高度为准,或者设置viewcontroller的Simulated Size属性为Freeform值,运行时改回fixed就可以了。ScrollView上面的空间都要设置上下左右和宽高,除非是imageview设置了图片会有默认大小不需要约束宽高。布局时必须让UIScrollView知道其contentSize大小,而不是一个不确定的值,这样才算完成UIScrollView布局,不然会有类似这样的警告:has ambiguous scrollable content height。

51、NSUserDefaults只能保存系统自带对象,比如字典、字符串、数组等。并且不能有null值,否则会报错Attempt to set a non-property-list object。

52、苹果推送证书跟bundle id是一一对应的。

53、如果一个xib要装载多个cell,记得在cell.h文件反过来再划线到xib一次,不然经常系统会错乱cell.h中的属性是属于xib中那个cell的。

54、想要headerView伴随着cell一起向上滑动,也就是viewForHeaderInSection这个view。有两种方式可以解决:

(1)在当前控制器中重写scrollViewDidScroll,这个方式在有下拉刷新和加载分页时有些小问题。

[objc]view plaincopy

print?

- (void)scrollViewDidScroll:(UIScrollView*)scrollView {

if(scrollView ==self.tv)

{

CGFloat sectionHeaderHeight = tvHeadViewHeight;

if(scrollView.contentOffset.y<=sectionHeaderHeight&&scrollView.contentOffset.y>=0) {

scrollView.contentInset= UIEdgeInsetsMake(-scrollView.contentOffset.y,0,0,0);

}elseif(scrollView.contentOffset.y>=sectionHeaderHeight) {

scrollView.contentInset= UIEdgeInsetsMake(-sectionHeaderHeight,0,0,0);

}

}

}

(2)设置tableView的style为UITableViewStyleGrouped,并且执行代理方法heightForFooterInSection返回0.01,取消没用的footer行。推荐第二种方法实现。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容