ACCESSiOS学习笔记总结整理

 

来源:http://mobile.51cto.com/iphone-386851_all.htm

学IOS开发这对一个新师的话,是一样宗很挠头的事体。其实读书IOS开发无论外乎平时之积淀与总。下面为大家整理了相同部分的iOS学习笔记总结整理,希望对大家享有帮助。

一.内存管制情况

1-
autorelease
,当用户之代码在不停运作时,自动释放池是无会见叫销毁之,这段日子内用户可以安全地动机关释放的靶子。当用户的代码运行告一截
落,开始等候用户之操作,自动释放池就会给保释掉(调用dealloc),池中的目标还见面收下一个release,有或会见为此给灭绝。
2-成员属性:
    readonly:不依赖定readonly,默认合成getter和setter方法。外界毫不关心的分子,则毫不设置任何性质,这样封装能增加代码的独立性与安全性。相当给民用成员?
    assign:表示仅进行简要的赋值,不见面发送retain消息。
    retain:会朝着旧值发送release信,向新价值发送retain音。
    copy:向旧值发release消息,向新价值发送copy信息。
3-引用计数特殊情形
    NSArray:当把一个对象上加至NSArray时,对象的援计数会加1,移除时见面减1。
    UIView:addGestureRecognizer会对手势识别器的援计数加1,removeGestureRecognizer会减1。
二 .图形API
本条讲话的好,清晰明确:http://www.cocoachina.com/bbs/read.php?tid=77731&page=1
1-Quartz2D,的绘图总是有在图纸环境(Graphics
Context)中。视图会在调用drawRect:方法进行绘图之前,创建好图形环境,
    通过UIGraphicsGetCurrentContext函数来取得这个图环境。
    如果直白以图像或者PDF上绘制,需要调用CGBitmapContextCreate或者CGPDFContextCreate函数来创造图形环境。
    Quartz2D制图的底蕴元素是路线。路径可以是一些基础几何样子,也足以是这些几乎哪里样子的整合。
    当得创造同长条路径时,应当调用CGContextBeginPath函数;
    当用拿路径绘制的起点移动到一个职位时,应当调用CGContextMoveToPoint函数;
    当想绘制一久线段经常,应当调用CGContextAddLineToPoint。
CTM(当前转换矩阵)将绘图从用户空间映射到装备控件。
    当图形环境正创建时,CTM初始化为一个单位矩阵。
    对CTM进行平移变换应当调用CGContextTranslateCTM函数,进行旋转变换应当调用CGContextRotateCTM函数,进行缩放变换应当调用CGContextScaleCTM函数。
2-UIBezierPath
采取UIBezierPath绘图的补:
    -采用系统坐标系
    -在Core Graphics的根底及包,具有Core
Graphics的第一意义,无需考虑图形环境。
    UIBezierPath* pathLines = [UIBezierPath bezierPath];
    [pathLines moveToPoint:point1]; // 移动到point1位置
    [pathLines addLineToPoint:point2]; // 画一修由point1届point2的丝
    pathLines.lineWidth = 5.0; // 线宽
    [UIColor redColor] set]; // 颜色设置
    [pathLines stroke]; // 开始勾画
    在同一UIBazierPath中,只能用相同之颜色与线宽。
    可以调用closePath,从脚下接触画一漫长直线到当前子路径的初始点。如果只要填写充路径,应当使用fill方法,此方法会填充路径中得享封闭子路径。
三.容器
    -NSArray和NSMutableArray
        +array:创建一个空数组
        +arrayWithArray:从另一个数组创建新的数组
        +arrayWithContentsOfFile:读文件创建数组
        +arrayWithObject:创建一个数组,其中富含一个加以对象
        +arrayWithObjects
        +arrayWithObjects:count: 从C数组创建
        -containsObject:是否含有一个要素
        -count:数量
        -lastObject:返回最后一个
        -objectAtIndex:返回某一个
        -objectsAtIndexes:返回一组,类型也NSArray
        -indexOfObject:返回对象找引
        -arrayByAddingObject:原数组最后加一个目标,产生一个初的数组
        -arrayByAddingObjectsFromArray:在原数组的末尾补充加其它一个数组中之持有目标,产生一个新数组
        -subarrayWithRange:抽取原数组被得一些,产生一个新的数组
        -isEqualToArray:比较单薄独数组是否一律
        -writeToFile:atomically:保存数组至一个文件
        -writeToURL:atomically:保存数组至一个URL
        -addObject:在反复组最终加加一个对象
        -addObjectsFromArray:在原数组最后加加其余一个数组的上上下下对象
        -insertObject:atIndex:向本数组制定位置添加一个靶
        -insertObjects:atIndexes:向原数组中同样系列岗位上加同系列对象
        -removeAllObjects:移除数组中之满贯目标
        -removeLastObject:移除数组中最终一个对象
        -removeObject:移除一个目标
        -removeObjectAtIndex:移除位于指定位置的对象
        -removeObjectsAtIndexes:移除位于同一名目繁多岗位的靶子
        -replaceObjectAtIndex:withObject用给定对象替换位于指定位置的靶子
        -replaceObjectsAtIndexes:withObjects:多目标,多岗位版本
        -setArray:用外一个数组中之拥有目标来替换当前数组中的保有目标
    -NSDictionary与NSMutableDictionary
        +dictionary
        +dictionaryWithContentsOfFile
        +dictionaryWithContentsOfURL
        +dictionaryWithDictionary
        +dictionaryWithObject:forKey
        +dictionaryWithObjects:forKeys
        +dictionaryWithObjectsAndKeys
        -count:数量
        -allKeys:返回一个累组,包含字典中之享有重点字。
        -allKeysForObject:返回一个勤组,包含有对诺到加对象的首要字。
        -valueForKey:通过字符串查找数值。
        -writeToFile:atomically
        -writeToURL:atomically
        -setValue:forKey: 加键-值对
        -addEntriesFromDictionary: 添加另一个字典中得有条条框框
        -setDictionary:将原先字典中条目设置为另外一个字典中得享条条框框
        -removeObjectForKey:移除一个生死攸关字之相应条目
        -removeAllObjects:移除所有条条框框
        -removeObjectsForKeys:移除一层层主要字的对应条目

四.文件系统
1- 概述
     bundle(沙盒):一个利用只能当投机之沙盒中读取或存储文件,而休克操作其他沙盒中的文书。好处:保护采取之难言之隐不受侵害,保护系统文件的部署,应用删除后有关文书为克让全部免去。
    每个应用还产生投机的沙盒,沙盒的根本目录的拿走方式是NSHomeDirectory()。
    根目录下之情节:
         -.app文件,实际上是一个文书夹,包含了可执行文件、Nib文件、图片资源、plist等。XCode中可知顾底资源,及编译后的可执行文件,都封闭装在app中。
        -Documents文件夹,用于存放你的采用所发生的数量,该文件夹可通过iTunes备份,可以储存游戏进度相当。
        -Library文件夹,用于存放用户偏好及临时文件。
        -tmp文件夹是网的中转站。
2-文件管理器
    NSFileManager,defaultManager()返回一个文件管理器的单例(多线程下不安全)。init(),在多线程编程中承诺竭尽使用init()。
    代理方:-fileManager:shouldRemoveItemAtPath和-fileManager:shouldRemoveItemAtURL在移除操作前为调用。
    -removeItemAtPath:error:删除位于指定路线的文件、连接、目录(及其所有子目录、文件)。
    -removeItemAtURL:error:同上。
    -contentOfDirectoryAtPath:查找所有在给定路径的子路径和文书。返回值为一个频繁组,其中蕴涵了NSString对象。查找只以当前目录进行,不会见进来下同样重合目录。
    -subpathsAtPath:查找给一定路下的所有子路径。深度查找,不压制当前层,也会找package的内容。
    -fileExistsAtPath:判断文件是否位于一个路子下。
    -isReadableFileAtPath:查询文件之可读性
    -isWritableFileAtPath:可写性
    -isExecutableFileAtPath:查询文件的可执行性
    -isDeletableFileAtPath:可删除性
3-NSString的门路功能
    -pathWithComponent:参数是如出一辙堆积components构成的再三组,返回的不二法门是出于这些components连接而改为的途径字符串,相邻components之间用/隔开。
    -pathComponents:返回一个屡屡组,包含路径中之components。
    -fileSystemRepresentation:返回C字符串
    -isAbsolutePath:判断是否为绝对路径
    -pathExtension:返回文件的壮大名,没有底就算回去空字符串
    -stringByAppendingPathComponents
:向现有路径上加一个component。斜杠/会被机关抬高
    -stringByAppendingPathExtension:向现有路径加上文件的扩大名
    -stringByDeletingLastPathComponent:移除最后一个路径component
    -stringByDeletingPathExtension:删除途径扩展名
    -stringByAppendingPaths:参数为一个累组,此道将数组中的字符串对象作为路径一糟上加至源字符串后面。
例子:

  1. NSString *homePath = NSHomeDirectory(); 
  2. NSString *docPath = [homePath stringByAppendingFormat:@”/Documents”]; 

五.UIActionSheet 按钮列表
六.旋转
    1- interfaceOrientation特性查询时之界面方向。
    2- rotatingHeaderView方法来查询时导航视图。
    3- rotatingFooterView来询问时之标签条。
七.高效拨打电话接口
openURL能协助您运行Maps,SMS,Browser,Phone甚至其他的应用程序。这是Iphone开发中本人不时索要以的一样段落代码,它不过只是发生一行而已。

  1. [UIApplication sharedApplication] openURL:[NSURL URLWithString:@”tel://8004664411″]; 

其一顺序通过基础之说道支持拨打电话的效果。
摘自:http://blog.csdn.net/smilelance/article/details/6213125
八.区分开设备项目的计
通话功能只有iPhone支持,对于其它装置对许按钮应该剥夺。
1. 用[UIDevice
currentDevice].model,这个返回的凡一个NSString,你可以举行如下判断即便能懂得设备是iPad还是iPhone.

  1. if ([UIDevice currentDevice].model rangeOfString:@”iPad”].location != NSNotFound) { 
  2.     NSLog(@”This is an iPad!”); 

2.
用UI_USER_INTERFACE_IDIOM()方法,这是系统定义的一条宏。使用办法也异常简短。

  1. if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
  2.     NSLog(@”This is an iPad!”); 

摘自:http://blog.sina.com.cn/s/blog\_3f88614f0100sdcm.html

九.连作编程
    1-GCD-Grand Central
Dispatch
,GCD使用队列来治本大多单任务,而每个任务是
以块(其定义类似于函数)来讲述的。GCD从队列中读取这些使就的职责,然后其几近按执行
引擎负责将这些任务分配给其所管理的线程。和手动线程管理相比,GCD能大地优化线程管理,并大地回落创建同销毁线程所带来的额外开销。除了在多核系
统上得性能改进之外,GCD还能帮忙提高运用的响应速度,并被代码更为彻底,易于维护。
    2-NSOperationQueue-操作队排,可以大幅度地减少开发者在出现编程中之负担,并且操作队排有同等仿Objective-C的API,使用起来方便。
    基本操作单位-NSOperation,操作。
    操作是包了一个和任务有关的代码和数量的抽象类,需要继续NSOperation,并且描述相关的天职。操作对象是一次性的,它不得不执行同一不好,下同样不良,需要创造一个新的实例。
    可以透过addDependency:方法为操作添加相互依赖性。假设操作A依赖让操作B,如果操作B没有收,操作A就未会见起来实施。完成是指
执行完毕,或者撤回了操作。有时需要对操作是否成作出判断。通过removeDependency:方法来移除操作的相互依赖性。
    操作的一个性是isConcurrent。当用操作队列来管理这些操作时,isConcurrent应当设置也NO,这时该重载
NSOperation的main函数(在类似中保留controller对象-weak,并在main中调用controller的方式)。
isReady属性用于描述操作是否曾得以起来实践,isExecuting属性表示操作是否在行中,isFinished属性表示操作是否顺利
完成,isCancelled属性则代表操作都取消。
    可以以操作运行中取消她的运转,只需要吃她发送cancel消息即可。在后续NSOperation类时,也欲支持cancel方法。
    如果只是待简单的操作,不思量延续NSOperation类,可以下NSInvocationOperation类,这个看似中之-initWithTarget:selector:object:方法能够拉你方便地选择人之目标同相应的力量。
    操作的执行各个取决于各自的优先级和相的依赖。
    操作队排有有限种植办法来实行中的操作。第一栽是开发新线程来运转这些操作,第二种植则是透过GCD来运行这些操作。但是无论如何,都无待手动管理
线程。尽量使用操作队列,只有当操作队排的频率显著供不应求时才转向GCD。因为操作队列是查封装于GCD的底子之上的,虽然多了一部分额外开销,但是也有着双重
加完善之成效。例子是TestNSOperation。
                           下页内容越精良实用

十.忙碌指示器
    UIActivityIndicator。

  1. UIActivityIndicatorView *activityIndicatior = [UIActivityIndicatorView alloc] initWithActivityIndicatorStyle: UIActivityIndicatorViewStyleWhiteLarge]; 
  2.     activityIndicator.center = CGPointMake(512, 384); 
  3.     [self.view addSubview: activityIndicator]; 
  4.     [activityIndicator startAnimating];  
  5.     [activityIndicator stopAnimating]; 
  6.     [activityIndicator removeFromSuperView]; 

十一.媒体播放

1- 音频
    [1]
音乐往往是储存在iPod曲库(注意位置)中之,可以由此媒体选择器(media
picker)或者媒体询问(media
query)读取,然后用音乐播放器MPMusicPlayerController播放。

  1. MPMusicPlayerController *musicPlayer = [MPMusicPlayerController applicationMusicPlayer]; 
  2. [musicPlayer setShufleMode: MPMusicShuffleModeSongs]; 
  3. [musicPlayer setRepeatMode: MPMusicRepeatModeAll]; 
  4. [musicPlayer setQueueWithQuery: [MPMediaQuery songsQuery]; 
  5. [musicPlayer play]; 

   
applicationMusicPlayer返回的播放器,在你的动被播放音乐。它不会见潜移默化及iPod播放器,也未可知从iPod播放器重得信息。
    iPodMusicPlayer返回的凡iPod播放器,在您出利用后,所有的设置都见面潜移默化至今后设备上之iPod播放器。
    获得音乐播放器后,需要为其装一个广播队列。可以用setQueueWithQuery:放方法,通过媒体询问MPMediaQuery来设置
播放队列,也可以为此setQueueWithItemCollection:方法,通过MPMdiaItemCollection来装播放队列。
    重复模式repeatMode可以设置为免另行、重复时曲目、或全播放列表;乱序播放shuffleMode可以安装也非乱序、乱序播放曲目或乱序播放专辑;音量volume的安以及节奏播放器一样。
    skipToNextItem跳到下同样首,skipToPreviousItem跳到齐亦然篇,skipToBegin跳到第一首。
    对应之宏都是盖MPMusic开头。
    [2]
利用体系声音服务来播音短暂音效(时长30秒中),并激动:   

  1. AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);  

    播放指定音效:

  1. NSURL *fileURL = [NSURL fileURLWithPath: path isDirectory: NO];  
  2. // 创建音效ID 
  3. SystemSoundID soundID; 
  4. AudioServiceCreateSystemSoundID((CFURLRef) fileURL, &soundID); 
  5. // 播放声音 
  6. AudioServicesPlaySystemSound(soundID); 

    [3] 音频播放器
    没有时长限制

  1. NSURL *fileURL = [NSURL fileURLWithPath: path isDirectory: NO]; 
  2. // 用URL来初始化音频播放器-播放的不是iPod曲库中之音乐 
  3. AVAudioPlayer* player = [AVAudioPlayer alloc] initWithContentsOfURL: fileURL error: NO]; 
  4. // 准备播放 
  5. [player prepareToPlay]; 
  6. // 设置代理 
  7. [player setDelegate: self]; 

   
方法:play、pause、stop。可以透过playing属性查询播放器是否正在播放当中,可以由此volume属性来改及询问播放器的播音增益(从0.0至1.0),可经过setting属性查询播放器外装置。

    duration表示音频的时刻长,
currentTime代表手上广播到之工夫。播放完毕后方可由此代办方法audioPlayerDidFinishPlaying:来处理播放后装。
2- 视频
    视频播放可以应用网页视图(UIWebView)进行嵌入式播放(能播放YouTube视频),或者使用电影播放器(MPMoviePlayerController)进行广播。
    [1] 电影播放器

  1. MPMoviePlayerController *player = [MPMoviePlayerController alloc]initWithContentURL: url]; 
  2.     // 设置播放器的尺寸,并将那投入视图中 
  3.     [player.view setFrame: rectFrame]; 
  4.     [self.view addSubView: player.view]; 
  5.     播放器的背景视图backgroundView。 
  6.     全屏[player setFullscreen: YES animated: YES]; 
  7.     播放另一个电影[player setContentURL: newURL]; 
  8.     [player requestThumbnailImagesAtTimes:arrayTimes timeOption:MPMovieTimeOptionNearestKeyFrame]; // 表示播放器不见面当您所指定的时日错开截取预览,而是以绝对时间的附近几帧中找寻效果太好之帧做为预览。 

scalingMode规定了影的缩放模式。   

initialPlaybackTime用来控制视频开播报的流年,单位凡秒。

一旦看到频源在网达到,那么要对安装服务器端的mimeType。
十二.运行环-runloop
    运行环作用于一个iOS应用的一切生命周期。它承受监视各种输入事件,并且在适合的当儿针对这些输入进行分配。应用之各个一个线程都发生还只发生一个周转环。你自己未需要创造为不需要销毁运行环,但是可由此currentRunLoop方法来博当前之运作环。

十三.定时器
    由于运行环机制,定时器的精度不赛,只能用来一般延时。
    例子:拼图游戏,DeskViewController.m。
    NSObject类的定时方法。
    performSelector: withObject: afterDelay:
运行方式,参数,时间(秒)。
    performSelectorOnMainThread: withObject: waitUntilDone:
在主线程遭遇,运行参数selector所指定的章程,如果waitUntilDone参数为YES,那么当前线程会为挡,直到selector运行了。
    performSelector: onThread: withObject:
waitUntilDone:同齐,但非肯定在主线程遭遇运行。
    performSelectorInBackground: withObject:
开启一个新线程,用于周转selector方法,selector方法应负责线程的初始化。
    cancelPreviousPerformRequestsWithTarget:取消同一个靶相关的具有计划好之动作。
    cancelPreviousPerformRequestsWithTraget: selector:
object只收回一定的计划动作。
十四.随机数
0~1之间自由数

  1. CG_INLINE float genRandomNum() 
  2.     return (float)arc4random/ARCRANDOM_MAX; 

十五.加速度传感器
    获得加速度传感器读数:

  1. UIAccelerometer *accelerometer = [UIAccelerometer shareAccelerometer]; // 单例 
  2. accelerometer.delegate = self; 
  3. accelerometer.updateInterval = 1.0f / 10.0f; // 传感器更新频率,普通游戏10~30HZ,虚拟现实类游戏,30~60HZ 
  4. accelerometer.x, accelerometer.y, accelerometer.z // 传感器读数 

    若不思再度接受传感器读数,可拿代理设置也nil

  1. [UIAccelerometer shareAccelerometer].delegate = nil;  
  2.  
  3. #define alpha 0.05 
  4. // 获得重力引起的加以速度读数: 
  5. – (void)accelerometer: (UIAccelerometer *)accelerometer didAccelerate: (UIAcceleration *)acceleration 
  6.     // 简单低通滤波器 
  7.     accelX = (acceleration.x * alpha) + (accelX) * (1.0 – alpha); 
  8.     accelY = (acceleration.y * alpha) + (accelY) * (1.0 – alpha); 
  9.     accelZ = (acceleration.z * alpha) + (accelZ) * (1.0 – alpha); 
  10.      
  11. // 获得动作引起的加速度读数: 
  12. – (void)accelerometer: (UIAccelerometer *)accelerometer didAccelerate: (UIAcceleration *)acceleration 
  13.     // 减去小通滤波输出,得到高通滤波输出 
  14.     accelX = acceleration.x – ((acceleration.x * alpha) + (accelX) * (1.0 – alpha)); 
  15.     accelY = acceleration.y – ((acceleration.y * alpha) + (accelY) * (1.0 – alpha)); 
  16.     accelZ = acceleration.z – ((acceleration.z * alpha) + (accelZ) * (1.0 – alpha)); 

十六.地图与连接服务器
[1]
添加框架MapKit.framework。使用MKMapView来见地图。注意相应直接下此类,而不是继续的。如果期望于MKMapView类之上添加效果,可以利用MKMapViewDelegate协议。
    初始化:

  1. MKMapView *mapView = [MKMapView alloc] initWithFrame: rect]; 

    初始化之后并无直接显示,还得指定显示的地形图区域:

  1. CLLocationCoordinate2D coordinate; 
  2. coordinate.latitude = latitudeValue; // 纬度 
  3. coordinate.longtitude = longtitudeValue; // 精度 
  4. mapView.region = MKCoordinateRegionMakeWithDistance(coordinate, width, height); // 指定显示区域,width和height单位都是米 

    之后可以由此addSubview添加地图。
    属性:showsUserLocation-为YES,系统会不停跟踪用户之职
          userLocationVisible-为YES,将显得用户所在位置
    显示地图之后,常常想于地形图及添加标注,这得创造一个类似,并促成MKAnnotation协议,这个近乎叫做标注对象。标注对象往往实现
setCoordinate:方法来设置其坐标。在地图视图上,可以装标注对象的坐标,然后上加进去,这样地图上虽会见现出一个标注。代理方title
和subtitle能够以标注上显得标题和副标题。  

  1. // 初始化 
  2.    mapView = [MKMapView alloc] initWithFrame: CGRectMake(100, 100, 550, 700)]; 
  3.    mapView.showsUserLocation = TRUE; 
  4.    mapView.mapType = MKMapTypeStandard; 
  5.    mapView.delegate = self; 
  6.    // 设置坐标 
  7.    CLLocationCoordinate2D coordinate; 
  8.    coordinate.latitude = 37.31; 
  9.    coordinate.longtitude = -122.03; 
  10.    mapView.region = MKCoordinateRegionMakeWithDistance(coordinate, 4000, 6000); // 4000米宽,6000米高之区域 
  11.    [self.view insertSubview: mapView atIndex: 0]; 

十七.经storyboard来初始化一个controller

  1. CBigDesignImageViewController *imageViewController = [self.storyboard instantiateViewControllerWithIdentifier:@”BigImageController”];  

   BigImageController是使当storyboard中设置的Identifier属性。

十八.被UIView子类设置阴影,包括各种控件
    1 导入QuartzCore framework
    2 #import <QuartzCore/QuartzCore.h>
    3 编码:

  1. [imgView layer] setShadowOffset:CGSizeMake(5, 5)]; // 阴影的限制  
  2. [imgView layer] setShadowRadius:2]; // 阴影扩散的限定控制  
  3. [imgView layer] setShadowOpacity:1]; // 阴影透明度  
  4. [imgView layer] setShadowColor:[UIColor brownColor].CGColor]; // 阴影的颜色 

十九.设置UIScrollView滚动速度      

  1. // 自动滚动太抢,效果不好,这里拿动画设置慢点,注意下面要直接赋值contentOffset,不要因此带animated参数的函数,否则动画会发题目,因为个别地处都是卡通片效果。 
  2.         [UIScrollView animateWithDuration:1.0f  
  3.                                delay:0  
  4.                                options:UIViewAnimationCurveLinear 
  5.                                animations:^{ 
  6.                                    scrollView.contentOffset = CGPointMake(0, 0);  
  7.                                } 
  8.                                completion:^(BOOL finished){} 
  9.                                ];  
  10.         // 如果当减速滚动过程遭到,按了刷新按钮,执行方的卡通,会产出重置的职,y不是0底情景,这里再次调用一浅,滚动到0。 
  11.         [scrollView setContentOffset:CGPointMake(0, 0) animated:YES];  

二十.EXC_BAD_ACCESS
Here’s the advice I generally give to developers when you hit an
EXC_BAD_ACCESS error:
-Set the NSZombieEnabled argument in your executable options, which
sometimes helps narrow down the cause
-Run with Apple Instruments such as Leaks to look for memory issues
-Set a breakpoint in your code and step through until you narrow down
where it’s crashing
Tried and true “comment out code till it works” then backtrack from
there :]

Xcode4 下设置 NSZombieEnabled 的方法: 
而可以点击 Xcode4 菜单 Product -> Edit Scheme -> Arguments,
然后以点击”加号”, 将 NSZombieEnabled 参数加到 Environment Variables
窗口被, 后面的数值写上 ”YES”.
还是在 Xcode4 菜单 Product -> Edit Scheme -> Diagnostics
设置窗口中一直招上 Enable Zombie Objects 即可,Xcode 可用
cmd+shift+< 进至此窗口。 
Xcode4
已经考虑到了今天之渴求,所以提供了重复便捷的装置的艺术,你啊得以此窗口被安装任何部分参数,你早晚会经过得到重新多之帮助信息。

 

吓了,看罢这首iOS学习笔记整理,不知道对您是不是富有启发。

相关文章