您的位置:首页 > 移动开发 > IOS开发

iOS零散知识点

2017-02-10 12:02 183 查看
1.通过UIDevice类的model属性可以得知当前设备是什么,比如模拟器、iPhone、iPad还是iPod。
2.使屏幕不变暗:[[UIApplication sharedApplication] setIdleTimerDisabled:YES];
3.UILabel多行文本(1)UILabel可以显示多行文本,它有一个属性叫numberOfLines,可以制定行的数量,超过则不显示。(2)当Label的尺寸超过指定行数对应的高度时,文字会在UILabel的垂直中间的位置上,上下会留白。(3)当numberOfLines属性指定为0时,则不限制行数。这时候就需要根据显示的文本内容来确定对应显示区域的大小,然后动态设置label的size。(4)使用这个特性,会比UITextView有一个好处:UITextView显示内容时上下左右会留空白,造成在确定其Frame时会存在误差。而UILabel则不存在这个问题。
4.UISegmentControl类中两个没有用过的方法:可以对UISegmentControl界面进行定制(1)-setWidth:forSegmentAtIndex:(2)-setImage:forSegmentAtIndex;
5.去掉iOS桌面图标上的高亮效果的办法:在info.plist文件中加一个字段,Icon already includes gloss effects,选中,意思就是图标已经包含高亮效果,不用系统再自动添加了。
6.UITableView有两个属性,tableHeaderView,tableFooterView,用来添加表视图的头和尾,它不同于section的头和尾。
7.给控件加边框,圆角:(1)添加QuartzCore.framework(2)代码:[view.layer setBorderColor:[[UIColor redColor] CGColor]];[view.layer setBorderWidth:1.0f];[view.layer setCornerRadius:8.0f];[view.layer setMaskToBounds:YES];
8.自定义导航栏视图的几个方法:(1)添加自定义title视图:self.navigationItem.titleView = xxx;(2)添加左右自定义按钮:    UIBarButtonItem *btItem = [[UIBarButtonItem alloc] initWithCustomView:xxx];    self.navigationItem.rightBarButtonItem = btItem;    或者:    self.navigationItem.rightBarButtonItems = [NSArray arrayWithObject:btItem];(3)定制导航栏背景:    iOS5之后,使用UINavigationBar的setBackgroundImage:forBarMetrics:方法可以定制导航栏背景。    iOS5之前,新增一个UINavigationBar的扩展,重写drawRect方法,代码如下:    -(void)drawRect:(CGRect)rect {          UIImage *image = [UIImage imageNamed: @"navBarBK.png"];          [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];      }
9.裁剪图片:UIImage *image = xxx;CGImageRef newImageRef = CGImageCreateWithImageInRect(image.CGImage,rect);UIImage *newImage = [[UIImage alloc] initWIthCGImage:newImageRef];
10.让iOS程序在iOS4.0以及之后没有多任务,即按下home键之后程序直接退出:在info.plist中加入一个字段,Application does not run in bacground,打钩。
11.获取info.plist的内容:[[NSBundle mainBundle] infoDictionary];
12.屏幕截图:UIView *currentView = xxx;UIGraphicsBeginImageContext(currentView.bounds.size);[currentView.layer renderInContext:UIGraphicsGetCurrentContext()];UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();//保存到相册UIImageWriteToSavedPhotosAlbum(viewImage,nil,nil,nil);
13.Security.framework(1)使用Security.framework可以实现钥匙串访问,读写,但是只能在真机上使用,模拟器会报错。可以用来保存一些私密数据,不用再为加密烦恼。(2)苹果封装了KeychainItemWrapper类,用来对钥匙串进行操作。该类通过一个表明身份的字符串和访问组字符串来初始化。实例方法如下:- (id)initWithIdentifier: (NSString *)identifier accessGroup:(NSString *) accessGroup;- (void)setObject:(id)inObject forKey:(id)key;- (id)objectForKey:(id)key;- (void)resetKeychainItem;(3)钥匙链不会随着程序的卸载或者固件重装被清除,可以用来维护持久的信息,例如可以判断某台设备是否是第一次安装某软件。
14.loadView和ViewDidLoad的区别(1)viewDidLoad方法在控制器view创建成功之后调用,不管是通过nib初始化还是通过loadView方法初始化的。(2)当view被请求,但是view为nil时,loadView方法就会被调用,一般用于使用代码来生成控件。
15.在应用中加入WIFI提示框的方法:如果iOS程序用到了WIFI,在没有WIFI网络连接的情况下,需要WIFI连接提醒,只需要在info.plist中加入如下两个键值即可:Applicatioin uses Wi-Fi    YESSBUsesNetWork                3
16.通过字符串加载类名:id object = [[NSClassFromString(@"Class1") alloc] init]; 效果和下面一样:id object = [[Class1 alloc] init];但是如果Class1不存在,上面的方法会返回nil,而下面的方法会报错。
17.UIWebView的使用:(1)使用webView的loadRequest方法,可以加载本地或者网络的html文件。(2)使用UIWebViewDelegate,可以获取浏览器网页开始加载和加载完毕事件,从而可以用来根据这些状态添加我们自己的UI界面,比如等待视图。也可以获取浏览器当前打开网页的网址,根据当前网址,我们也可以有自己的UI动作。(3)通过stringByEvaluatingJavaScriptFromString方法,可以在浏览器控件外部调用JavaScript脚本。
18.当应用crash时,捕获错误日志:(1)首先声明发生异常时的回调函数,格式如下:     void MyUncaughtExceptionHandler(NSException *exception) {}     通过NSException对象,可以获取错误时间,错误原因,错误堆栈。()设置捕获回调:NSSetUncaughtExceptionHandler(&MyUncaughtExceptionHandler);
19.MPMoviePlayerController可以播放在线视频和音频(只支持Http Live Stream协议),以及本地的视频音频。支持的格式仅限于苹果规定支持的格式。
20.@Class和#import的区别:(1)import会包含这个类的所有信息,包含实例变量和方法。而@Class只是告诉编译器,声明的是类的名称,至于这个类是如何定义的,先不用考虑,后面再告诉你。(2)一般@Class只放在interface中,在实现类中,同时需要用@import来告诉编译器类里面的具体内容。(3)使用@Class会增加编译效率。(4)使用@Class可以解决循环依赖关系的问题。
21.StringWithFormat和@"str"的区别:(1)@"str",没有引用计数效果,引用计数为-1,调用retain也没用。(2)stringWithFormat使用自动释放,创建完成时,引用计数为1。
22.iOS中,int是4个字节,short是2个字节,char是1个字节,long int也是4个字节。一个字节8位。
23.@public 、@protected 、@private只会影响它的子类的访问权限,不会影响到类本身变量的访问权限。
24.在LLVM3.0编译器中,支持将实例变量写到实现文件中,可实现私有的成员变量。示例代码如下:@implementation MyViewController{    NSString *name;}
25.set方法的写法:if(_value != value){ [_value release]; _value = [value retain];}
26.RunLoop监视操作系统的输入源,如果有事件数据,runLoop就发送消息,通知各个对象。它是一个一个事件处理的循环,用来不停的调度工作以及处理输入事件。使用它的目的是让你的线程在有工作的时候忙于工作,而没工作的时候处于休眠状态。一个UI事件,一个Timer call,delegate call,都会是一个RunLoop。
27.自动释放池的release和drain的区别:(1)release在GC(自动内存回收)环境下是一个空操作,不做任何事情。(2)在引用计数环境下,drain的行为和release是一样的,但是在GC环境下,它会调用object_collect_if_needed来触发GC。
28.NSInteger和int的区别:在苹果的API实现中,NSInteger时一个封装,它会识别当前操作系统的位数,自动但会最大的类型,位数不一样。封装可以查看苹果文档。
29.进程间通讯的方式(iOS中基本用不到):管道,信号量,共享内存段,消息队列,以及socket。
30.线程通讯的方式:performSelector。比如:performSelector:onThread:withObject:waitUntilDone:performSelectorOnMainThread:withObject:waitUntilDone:cancelPreviousPerformRequestsWithTarget:selector:object:
31.如果一个NSArray中保存的是同种类型的对象,并且想对其中的每个对象都调用一个方法,可以使用makeObjectsPerformSelector:withObject:方法。
32.NSTime不是一个精准的定时器,当操作耗时很长或者阻塞,就可能错过一个点。
33.进程和线程的区别:(1)线程是CPU操作的最小单元,进程是系统资源分配时的最小单元。(2)线程间共享内存空间,进程的内存空间时独立的。(3)进程中包含线程。
34.UIScrollView主要使用了装饰器模式。Cocoa通过利用NSClipView实例装饰对象提供了滚动技术,让用户控制对象的哪个部分是可见的。装饰器模式通过复合给对象添加了公共的可重用能力,用于替换通过子类化添加这些能力,可以在运行时添加或者配置装饰器。
35.SQLite相关api:sqlite3_open、sqlite3_prepare_v2、sqlite3_bind_xxx、sqlite3_step、sqlite3_column_xxx、sqlite3_finalize、sqlite3_close。
36.类目(Catagory)(1)使用类目,可以在不子类化的情况下,给一个类添加功能。(2)当类目中的方法名和类中的方法名冲突时,类目的方法会比类以及子类中方法的优先级高。(3)如果不提供类名,则类目中定义的方法被视为必须实现的API,如果缺少实现代码,则编译器会报警。
37.将NSLog的内容重定向至文件:freopen([logFilePath cStringUsingEncoding:NSASCCIIEncoding], "a+", stderr);
38.extern关键字使用(1)首先申明一个变量,比如:NSArray *resArray; 然后extern NSArray *resArray;     这样,在项目里面的任何类里面,都可以访问resArray这个变量。     此方法可以在一些需要共享数据的场合使用。(2)extern "C",表示编译生成的内部符号使用c约定,大多出现在交叉C编译环境中。    __cplusplus只在c++中有定义。
39.从iOS4.0开始,iOS类库增加了对正则表达式的支持,类名为NSRegularExpression。
40.从iOS5.0开始,iOS类库增加了对JSON的支持,类名为NSJsonSerialization。
41.在编译环境中添加"NSZombieEnabled"变量,并且置为YES,可以捕获EXE_BAD_ACCESS错误,能让错误提示的更精细。但是添加了此变量之后,即使对象的引用计数为0,内存也不会被回收,应用程序的内存使用会一直增加。所以在编译完成之后,要把这个变量删掉。
42.自定义TableViewCell的背景颜色和选择后的颜色:将TableViewCell的backgroundView和SelectBackGroundView修改成指定的View。
43.tableView:willDisplayCell:forRowAtIndexPath方法:这个方法在TableView要使用cell去绘制row之前调用,这个方法给代理机会去设置基于状态的属性,并且早于TableView,比如选择状态的颜色或者背景的颜色等。
44.修改UIAlterView默认的Frame高度,使用委托:-(void)willPresentAlertView:(UIAlertView*)alertView {    alertView.frame =CGRectMake(5.f,1.f,100.f,200.f);}
45.由于TableView的cell重用机制,导致多个图片下载事件的回调会指向同一个cell。解决办法:在图像下载事件中记录当前cell的row,同时将cell的tag设置为row,当图片下载完毕时,先判断下载事件中记录的row和cell的tag是不是一致,如果一致,则显示图片到cell上,如果不一致,则不显示图像。
46.UIScrollView可以放大缩小显示的内容,它有一个参数用来控制缩放的幅度,zoomScale,默认是1.0。
47.让UIScrollView支持捏合动作:(1)实现代理方法:viewForZoomingInScrollView,返回当前需要伸缩的视图对象,比如UIImageView。当两个手指捏合时,视图对象的size的值将会被改变。(2)设置scrollView的最大和最小伸缩倍数,maximumZoomScale、minimumZoomScale。(3)重写scrollView的layoutSubviews方法,在此方法中,可以根据需要重置视图对象的x和y值,后者根据视图的size属性,重置scrollView的contentSize。
48.ios自定义键盘:UITextField有两个属性:inputView,inputAccessoryView。(1)inputView含义:输入界面。当你想要某输入框的输入键盘使用自定义的键盘的话,可以自己创建一个键盘,然后把键盘视图赋值给这个属性。当点击此输入框时,弹出的键盘就是我们自己的键盘了。(2)inputAccessoryView含义:辅助输入界面,一般放在键盘的上方。可以增加类似于"上一项"、"下一项"、"完成"等功能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: