美文网首页
IOS开发笔记

IOS开发笔记

作者: 阿诺德姜嫄水乡 | 来源:发表于2017-04-07 15:35 被阅读0次

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

    首先给出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行。推荐第二种方法实现。

    相关文章

      网友评论

          本文标题:IOS开发笔记

          本文链接:https://www.haomeiwen.com/subject/bdphattx.html