ios总结

2024-05-08

ios总结(通用10篇)

ios总结 篇1

下列简化写法是IOS6.0以后的新写法

NSNumber

//简化前的写法:

NSNumber *value1;

value1 = [NSNumber numberWithInt:12345];

value1 = [NSNumber numberWithFloat:123.45f];

value1 = [NSNumber numberWithDouble:123.45];

value1 = [NSNumber numberWithBool:YES];

//简化后的写法:

NSNumber *value2;

value2 = @12345;

value2 = @123.45f;

value2 = @123.45;

value2 = @YES;

//装箱表达式也可以采用类似的写法:

NSNumber *piOverSixteen1 = [NSNumber numberWithDouble: ( M_PI / 16 )];

NSString *path1 = [NSString stringWithUTF8String: getenv(”PATH“)];

//可以分别简写为:

NSNumber *piOverSixteen2 = @( M_PI / 16 );

NSString *path2= @( getenv(”PATH“) );

//对于字符串表达式来说,需要注意的是表达式的值一定不能是NULL,否则会抛出异常,

NSArray

//对于NSArray的初始化来说,有非常多的写法,这里就不再一一罗列,我们直接看新的写法

NSArray *array;

array = @[]; //空数组

array = @[ a ]; //一个对象的数组

array = @[ a, b, c ]; //多个对象的数组

//编译器在处理时:

array = @[ a, b, c ];

//编译器生成的代码:

id objects[] = { a, b, c };

NSUInteger count = sizeof(objects)/ sizeof(id);

array = [NSArray arrayWithObjects:objects count:count];

//注意,如果a,b,c对象有nil的话,运行时会抛出异常,这点和原来的处理方式不同,编码的时候要多加小心,

NSDictionary

//同样,对于字典这个数据结构来说,有很多种初始化的方式,我们来看新的写法:

NSDictionary *dict;

dict = @{}; //空字典

dict = @{@”key1“:@”value1“ }; //包含一个键值对的字典

dict = @{ @”key1“ : @”value1“, @”key2“ : @”value“, @”key3“ : @”value3“ }; //包含多个键值对的字典

//采用上述写法构建的容器都是不可变的,如果需要生成可变容器,可以传递-mutableCopy消息。例如

NSMutableArray *mutablePlanets = [@[

@”Mercury“, @”Venus“, @”Earth“,

@”Mars“, @”Jupiter“, @”Saturn“,

@”Uranus“, @”Neptune“

] mutableCopy];

NSMutableDictionary *dic=[@{ @”key1“ : @”value1“, @”key2“ : @”value“, @”key3“ : @”value3“ } mutableCopy];

ios项目总结ppt 篇2

做项目前:

零面向对象实际项目经验,更不用说透彻理解design pattern

零iOS实际项目经验

只懂一点点的C和汇编代码,其它如java、ruby、php、HTML5一点不沾边,可以说是不属于互联网的业余玩家

项目的情况:

做项目过程中,客户需求变化极其频繁和巨大,对代码结构的robust是一大挑战。虽然本人特别讨厌需求变动,但是在外,身不由己

Universal项目,即是iPhone + iPad 的一个项目

基本上这个项目涉及到了iOS的方方面面,麻雀虽小,但是五脏俱全

关于程序结构设计

尝试用面向对象的方式去设计结构,但设计的时候流于形式,根据现有的一些best practice依葫芦画瓢,但实际上只有实践了才知道,比如:

1. 属性: 什么时候用和为什么用属性、如何保持属性私有、self.的使用,属性的内存释放;

2. 成员变量和属性的区别

3. 方法:什么时候用类方法和对象方法

4. 好的设计真的是“增之一分则太长,减之一分则太短”;好的设计关系到以后重构的方便性

5. 解耦设计:对象之间如何通讯,如何传值,如何回传,如何用好notification、delegate、KVO;如何保持对象的纯洁(不受玷污)

6. MVC中的M和C分离,一直觉得自己做的项目是小项目,而且一直认为过于注重结构,会增加代码量,但是实际上项目不分大小,好的设计:

能随时应对客户的需求变化

能自己看得懂自己写的代码(改的多了,都看不懂自己的代码了,这是最悲催)

回归测试,一旦客户需求改变,乱糟糟的代码更加乱,这样回归基本上是需要全部。好的设计可以把客户需求改变带来的回归测试降低到最低

关于面向对象设计

之前从没有面向对象设计的经验,所以第一次从这种角度去解决问题。“实践出真理”,无论你平时看多少书,如果没有实践过,真的`是无法体会面向对象设计的:

一切从面向对象出发设计:类、对象、(私有)方法、(私有)属性

所谓面向对象,就是根据现实世界中客观存在的事物(即对象)出发来构造软件系统

只有真正从面向对象去设计,几个月甚至几年后,你才能复盘你的代码。以前一直觉得代码复盘如同围棋复盘绝对是天才才有的本领,现在才明白,其实关键是:你要清楚的知道你的代码用在了哪里,为什么用

从面向对象出发,不要觉得一个功能很简单一个方法就搞定,尽量用面向对象去考虑。这是做项目过程中犯的最大的错误

关于ARC

我是项目做了1个月后,才决定把项目从MRC转到ARC,现在回头看看,当初真实明智,因为在第一个月,内存管理上的问题和处理让我很头疼也很花时间。关于ARC

没有想象中的会比MRC性能差,ARC不是JAVA的垃圾回收,性能其实与MRC基本一致

ARC中没有明确的release操作,这时更需要注意内存管理,比如在一个Controller中使用Gyro sensor的时候,这种操作是绝对不能赋值给局部变量的:[[CMMotionManager alloc]init]

虽然ARC似乎能为你做很多事,但是有些事情自己解决还是自己解决,比如当不需要用Gyro sensor时,_motionManager = nil(此时如果不设置,则startDeviceMotionUpdatesToQueue中的更新会一直进行);

总之,对于ARC,难得糊涂中要“时刻保持觉醒”

关于Perfomrance设计

Coding真的是一点都来不得马虎,以前一直觉得iOS性能强大,无须担心性能,但是项目做下来,一大痛苦之处就是性能不够:

应用程序、UIViewController和UIView的生命周期的认识如果不十分清楚,就很容易造成性能瓶颈

大量的UIView插入移除操作会导致性能问题

UITableView和UIScrollView导致滑动不顺畅的best practice

关于知识点

成为一名优秀Programmer需要丰富的经验和知识面,但是知识永远是学习不完的,所以要抓核心和基本,个人觉得以下几个知识点是iOS开发必须的。至于有些比如CoreText、CoreImage等,其实等到需要用时再去学习也来得及。

内存管理,MRC和ARC

多线程,iOS下有多种多线程实现方式,什么都应该了解一下,但是除了dispatch需要精通,其它只需要看懂 (dispatch效率最高,使用最方便)

数据库,无论是Core Data,FMDB还是基本的Sqlite,万事不离其中,掌握Sqlite和SQL基本语法是必须的

UIViewController、UITableViewController 和应用程序的生命周期

看似简单但是很有深度的View之间的转场处理,因为涉及到大量生命周期,如presentModalViewController, presentViewController, pushViewController, addSubview, removeFromSuperview, self.view....

网络处理相关的,如何请求JSON数据,如何HTTP GET和POST

旋转处理,特别是iOS4、iOS5、iOS6的不同处理

Debug的能力

基本的设计模式:MVC、delegate、notification、target-action

面向对象的核心思想,例如:不要以用户无法使用或不感兴趣的东西扰乱类的公有接口、类之间应该零耦合、把不相关的信息放在另一个类中

不重复造轮子

这个也不例外,iOS下的开源framework都太多了,基本上你需要的都能在Github或者Stackoverflow上找得到,所以平时:

不要做井底之蛙,平时多了解开源的框架

框架适合就行,就像争论AFNetwork和ASIHttpNetwork更棒没有意义的。写程序的有两类人,一类人追求技术极致,一类人技术只是实现产品的一种手段,我就是后面这个

关于开源框架的学习

这世界好的开源框架太多了,给我都看不完,所以需要选择,就像读书不在于都多,而在于读精,个人推荐如下。

Three20 (其实我是不推荐的,因为它过时了,但是因为淘宝客户端用到)

AFNetwork

MBProgressHUD

SDWebImage

关于Continuous Improvement

Six sigma中提到了持续改进,我们的能力提高也是这样。通过读好的开源框架是最好的进步方式。如何读开源框架,我们读开源框架的目的:

其中的花式写法我们只是了解,不是我们的目的

了解作者写框架的思路

ios总结 篇3

进入正题, 我们经常会在官方文档里看到这样的代码:

MyClass.h

@interface MyClass : NSObject {

MyObject *myObject;

}

@property (nonatomic, retain) MyObject *myObject;

@end

MyClass.m

@synthesize myObject;

-(id)init

{

if(self = [super init])

{

MyObject * aMyObject = [[MyObject alloc] init];

self.myObject = aMyObject;

[aMyObject release];

}

return self;

}

有人就问, 为什么要这么复杂的赋值? 为什么要加self. ? 直接写成self.myObject = [[MyObject alloc] init];不是也没有错么? 不加self有时好像也是正常的?

现在我们来看看内存管理的内容:

先看间接赋值的:

1.加self.

MyObject * aMyObject = [[MyObject alloc] init]; //aMyObject retainCount = 1;

self.myObject = aMyObject; //myObject retainCount = 2;

[aMyObject release];//myObject retainCount = 1;

2. 不加self.

MyObject * aMyObject = [[MyObject alloc] init]; //aMyObject retainCount = 1;

myObject = aMyObject; //myObject retainCount = 1;

[aMyObject release];//对象己经被释放

再看直接赋值的:

3.加self.

self.myObject = [[MyObject alloc] init]; //myObject retainCount = 2;

4. 不加self.

myObject = [[MyObject alloc] init]; //myObject retainCount = 1;

现在是不是有点晕, 我们先来把代码改一下, 官方的一种常见写法:

MyClass.h

@interface MyClass : NSObject {

MyObject * _myObject;

}

@property (nonatomic, retain) MyObject *myObject;

@end

MyClass.m

@synthesize myObject = _myObject;

OK, 你现在再试下, 如果你用self._myObject = aMyObject; 或者 myObject = aMyObject; 你会得到一个错误, 为什么呢, 这里就是和Obj-c的存取方法有关了. 说白了很简单 , 大家都知道, @property (nonatomic, retain) MyObject *myObject; 是为一个属性设置存取方法, 只是平时我们用的方法名和属性名是一样的,现在你把它写成不同的名字, 就会很清楚了. _myObject是实例变量本身, myObject是存取方法名.

现在我们知道self.是访问属性的存取方法了, 那存取方法又怎么工作的? self.myObject = [[MyObject alloc] init]; 为什么会有内存泄露?

关于nonatomic我不多解释了, 它不是我要讲的重点, 而且我也没完全搞清楚, 不误导大家. 我只说assign, retain ,copy.

get方法是:

-(MyObject*)myObject{

return _myObject;

}

set方法是:

// assign

-(void)setMyObject:(id)newValue

{

_myObject = newValue;

}

// retain

-(void)setMyObject:(id)newValue

{

if (_myObject!=newValue)

{

[_myObject release];

_myObject = [newValue retain];

}

}

// copy

-(void)setMyObject:(id)newValue

{

if (_myObject!=newValue)

{

[_myObject release];

_myObject = [newValue copy];

}

}

其实这些方法里还有别的内容, 并不只是这些. 而且这些方法可以被重写. 比如你写一个

-(MyObject*)myObject

{

return _myObject;

}

放在你的类里, 你调用self.myObject时(不要把它放在等号左边, 那会调用setter方法,#add无所谓,那也是getter方法先调用)就会调用这个方法.

这里多说一句, @property 是为你设置存取方法, 和你的属性(#add即实例变量)无关, 你可以只写一句

@property (readonly) NSString *name;

在你的类里实现

-(NSString*)name

{

NSLog(@“name”);

return @“MyClass”;

}

同样可以用self.name调用.

现在回头说说我们开始的那四个赋值,

当不用self.的时候, 那句话只是一般的赋值, 把一个指针赋给另一个指针, 不会对分配的内存有任何影响,

所以2中不要最后[aMyObject release];这句话和4是一回事. 这里就不多说了.

我们看看1和3, 当调用setMyObject:方法时, 对newValue 做了一次retain操作, 我们必须把原来的newValue释放掉, 不然就会内存泄露, 在1里, 我们有个aMyObject可以用来释放, 在3里, 我们无法释放它, 所以, 在3里, 我们会多出来一个retainCount. 内存泄露了.

说了这么多, 我只想让大家清楚, 什么是调用属性本身, 什么是调用存取方法. 怎么样才能避免内存泄露, 而且, 以上例子里是在自己类里的调用, 如果这个类被别的类调用时, 更要注意一些,

顺便说一下, 如果你想在其它类访问对象属性, 而不是通过存取方法, 你可以用myClass->myObject来访问, 这样是直接访问对象本身, 不过你先要把myObject设成@public. 但这个是官方不提倡的,

ios总结 篇4

这两天适配iOS6,在UITabBar隐藏后原区域不响应点击事件的问题上裹足不前,异常上火(不用心,就会这样)!

对于iOS7而言,隐藏UITabBar很容易:

self.tabBarController.tabBar.hidden = YES;

然后把self.view的高度加上个tabBar的高度(默认高度49)就ok了,可谓不费吹灰之力!iOS7以下就不行了!

这里有一段代码,iOS6及以上系统都可以用,我就直接粘过来了

-(void)makeTabBarHidden:(BOOL)hide { // Custom code to hide TabBar

if ( [tabBarController.view.subviews count] < 2 ) { return;

}

UIView *contentView; if ( [[tabBarController.view.subviews objectAtIndex:0] isKindOfClass:[UITabBar class]] ) {

contentView = [tabBarController.view.subviews objectAtIndex:1]; } else {

contentView = [tabBarController.view.subviews objectAtIndex:0]; }

if (hide) {

contentView.frame. = tabBarController.view.bounds; } else {

contentView.frame. = CGRectMake(tabBarController.view.bounds.origin.x, tabBarController.view.bounds.origin.y,

tabBarController.view.bounds.size.width, tabBarController.view.bounds.size.height -

tabBarController.tabBar.frame.size.height); }

tabBarController.tabBar.hidden = hide;

}

经检验,可靠可用,再也不用担心iOS6下UITabBar隐藏后该区域还死活不能响应点击事件的问题了!

第一眼看到这段代码时,我是视而不见啊,竟然没去试试,事后,这也令我异常恼火(我想我应该活该)!

我同事试了一下,奏效!悔不当初 .多看一眼 .......

我分析一下这个代码:

在iOS6上,UITabBar位于一个viewController中self.view的上面,你要是用

self.tabBarController.tabBar.hidden = YES;

然后你这样

[self.tabBarController setTabBarItem:nil];

甚至你再这样

[self.tabBarController.tabBar removeFromSuperView];

最后你会发现,tabBar所占的区域还是不能响应点击事件,在iOS6上它也就占着茅坑不拉了,你真拿它没招...

所以用上面的代码吧!

不说啥,我只是对这种iOS6上tabBar占着茅坑不拉的行为很愤慨!

说点实用的

话说我这边是写的是一个继承自UITabBarController的一个子类,在viewDidLoad方法中我发现,self.view一开始是有两个subview的,一个就是tabBar,这个货占着self.view下方49的高度,另一个就是contentView(我姑且这么称呼,具体叫啥名估计得问xcode它父亲了).iOS7以下系统中当你把tabBar拿掉后,contentView是不会自动把自己的高度延展的,所以就你就得手动去帮它把tabBar的高度加上去,

如何iOS6和iOS7下隐藏UITabBar

而iOS7及以上的系统,苹果的开发人员应该帮我们把这活给干了,所以我们隐藏就行了。

IOS学习笔记 篇5

1.特殊的空类型 nil,该类型没有名称,空引用(nil)是空类型变量唯一的值,该类型可

以转换为任何引用类型

2.Ios系统中short int 2字节,int 4字节,long int 4字节,longlong 8字节

3.NSLog输出各种类型的字符,支持附加字符

L 输出为长类型的数

M 指定输出数据所占的最小宽度

.n表示输出n位小数

-表示输出的数值左边对齐

4.NSString在双引号前使用@符号,区分c语言的字符串

5.枚举类型自定义 enum{male,female} me you;

6.BOOL类型返回值为YES或者NO

7.OC中并没有提供方法或者属性来访问数组的长度,只有通过sizeof()函数来计算数组的长度:sizeof(数组变量)/sizeof(数组变量[0])

8.自动内存管理的代码要放在 @autoreleasepool{}中

9.预处理 宏定义 #define #undef带参数的宏定义 #define 宏名称(参数列表)字符串

10.条件编译 #ifdef、#ifndef、#else、#endif 或者 #if、#elif、#else、#endif

11.#import可以帮助程序员判断是否有重复导入的情况

12.结构体 struct不允许直接赋值,使用typedef修改结构体名称时允许直接初始化

13.Objective c提供了@private @package @protected和@public等访问控制符来实现封装

14.定义接口部分的语法

@interface MyClass :NSObject

{

Int _count;

Id _data;

NSString* _name;

}

-(id)initWithString:(NSString*)aName;

+(MyClass*)createMyClassWithString:(NSString*)aName;

@end

15.从xcode4开始,objective c建议成员变量以下划线开头

16.方法类型标识:+代表该方法是类方法(就是指静态方法),直接用类名调用即可;—代

表该方法是实例方法,必须用对象才能调用

17.方法声明的语法:

—(void)insertObject:(id)anObject atIndex:(NSUInteger)index

18.只在实现部分(.m文件中)定义的变量或方法只能在实现部分使用,称为被隐藏的成员变

量或方法,无法从外面访问他们。

19.定义类的变量的方法 类名* 变量名

20.创建对象的方法 [[类名 alloc] 初始化方法]

21.可以使用java的new关键字来创建对象 [类名 new]

22.Self关键字的作用:1类内部的方法互相调用 2类似于java的this关键字 3返回当前的类

23.Id类型可以代表所有对象的类型,任意类的对象都可以赋值给id类型的变量

24.形参个数可变的方法,在最后一个形参后增加逗号和三点(,...)

25.为了在程序中获取个数可变的形参,需要使用关键字,va_list、va_start、va_end、var_arg

26.Objective c里支持访问控制,需要添加@public @package @protected @private 关键字

27.Objective c里不支持静态变量 static关键字不能用于修饰成员变量,static修饰的全局

变量只能在当前原文件中访问,为了模拟静态变量,可以再类实现部分定义一个static修饰的全局变量,并提供一个静态方法来暴露该全局变量

28.成员变量的封装使用setter和getter方法,分别为getAbc和Abc

29.在objective c 2.0开始可以自动合成setter和getter方法,需要在类的接口部分添加

@property指令,在类的实现部分添加@synthesize指令

30.Atomic指定合成的存取方法是否为原子操作,当一个线程进入存、取方法的方法体后,其他线程无法进入存取方法,这样就可以避免多线程并发破坏对象的数据完整性。

31.Copy指示符的使用 @property(nonatomic,copy)NSString* name;当被调用时只是复制

了一个副本

32.Getter和setter方法可以为getter方法和setter方法指定自定义方法名:@property(assign,nonatomic,getter=wawa,setter=nana)int price;

33.Readonly指令指示系统只合成getter方法,不合成setter方法,readwrite指令指示系统

需要合成getter方法和setter方法,是系统的默认设置

34.Retain指示系统在定义属性时,该属性原来所引用的对象的引用计数减1,被赋值对象的引用计数加1.ARC机制类似于java的垃圾回收机制,全称为autoreleasepool

35.Objective c支持点语法的访问,前提是该对象包含setter方法

36.KVC(key value coding)允许以字符串的形式间接地操作对象的属性

37.KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则

对象就会接受到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了。

38.Objective c中没有构造方法,对象的初始化有对应的init方法,可以在类中重写init方

法也可以自定义任意名称的初始化方法。

39.Objective c中没有多继承的概念

40.Super关键字与java中使用方法类似,可以直接在子类中调用父类被覆盖的实例方法

41.子类接口不允许定义与父类接口部分重名的成员变量,不论父类的成员变量是否是私

有;而在实现部分没有限制

42.在objective c中没有接口类和抽象类的概念

43.Objective c的包装类是为了让c语言的基本类型具有面向对象的特征

44.NSInteger、NSUInteger、CGFLoat并不是包装类

45.NSValue和NSNumber都是包装类,一般用NSNumber较多,包含3类方法:

+numberWithXXX、-initWithXXX、-XXXValue,用这些方法可以将基本类型转换为包装类

46.Description 方法是NSObject类的方法,可以描述当前的类

47.==与isEqual的区别:本质上没有区别,但isEqual方法是NSObject类的实例方法可以

被重写,可以提供自定义的相等标准。与java不同的地方是,objective c中另外有一套isEqualToString方法来判断两个字符串是否相等

48.Objective c中没有提供抽象类的语法支持,但可以用类簇(cluster)来进行模拟

49.类别(category)objective c 允许使用类别为现有的类添加新方法,并且不需要创建子

类,不需要访问原有类的源代码。定义类别时必须使用圆括号来包含类别名类别中通常只定义方法。一般习惯将类别的接口文件定义成“类名+类别名.h”的形式。类别也可以重写原有类的方法,但通常不建议这么做。可以使用子类来重写。

50.可以使用类别来对类进行模块化设计,目的是解决一个类特别大时将不同的实现方法放

在不同的类中。

51.扩展(extension)与类别相似,扩展相当于匿名类别。

52.协议是objective c里的重要知识点,作用类似于接口,用于定义多个类应该遵守的规范,可以使用类别实现非正式协议;也可以直接定义正式的协议,正式的协议不再使用@interface、@implementation关键字而是使用@protocol关键字。Objective c协议的功能基本等同于接口,而接口的实现也等同于遵守协议,遵守协议也可以说成是实现协议。

53.定义的协议可以把协议定义的方法委托给实现协议的类,这样可以让类定义具有更好的通用性,在ios开发中大量依托于委托的概念。

54.使用@try„„@catch„„@finally捕获异常

55.Objective c 也提供了类似java的反射机制,并提供了3中编程方式与运行环境交互:

1.直接通过objective-c的源代码。2通过NSObject类中定义的方法进行动态编程。3.直接调用运行时函数进行动态编程。

56.Ios的内存回收机制有3中:1.手动引用计数和自动释放池 2.自动引用计数 3.自动垃圾

回收。目前只支持前两种回收。Ios4.2之前的只能使用第一种。

57.Xcode5中默认启用了自动引用计数(ARC),因此不必再担心内存管理

58.NSString字符串类,包含字符串的一些通用的方法。

59.NSMutableString是可变字符串,其中NSString类似于java中的String,而

NSMutableString就类似于java中的StringBuilder类

60.日期与时间类NSDate,NSDate输出时可以输出不同语言的格式,需要使用NSLocale

来设置,NSLocale代表一个语言、国际环境

61.日期格式器(NSDateFormatter),作用是完成NSDate与NSString之间的转换

62.日历(NSCalendar)与日期组件(NSDateComponents)类似于java中的Calendar类,可以从日期中分别提取到年、月、日、时、分、秒

63.定时器(NSTimer)

64.对象复制(copy与mutableCopy方法),copy用于返回对象的不可修改的副本,mutableCopy返回对象的可变副本。对副本进行修改不影响原来的对象。

65.NSCopying与NSMutableCopy协议

66.浅复制(shallow copy)与深复制(deep copy)

67.Setter方法可以使用copy指示符,将传入参数的副本赋给程序的实例变量

68.Objective-c的集合,NSArray代表有序、可重复的集合;NSSet代表无序、不可重复的集合;NSDictionary代表具有映射关系的集合,集合里只能保存对象,相当于java中的map集合69.访问NSArray时使用objectAtIndex:index来访问,但在ios5.0以上的系统可以使用下

标来访问,例如array[i],与java中的访问方式相同。

70.Objective-c也支持java中foreach访问,成为快速枚举(for....in)

71.NSMutableArray是NSArray的子类,代表集合元素的可变的集合,增加了一些方法:

add、remove、replace、sort

72.NSArray允许对集合中的所有元素进行整体的KVC编码,有两个方法:setValue:froKey、valueForKey

73.NSArray还对集合中所有元素或部分元素进行KVO编程提供了方法:addObserver:

forKeyPaht:options:context:、removeObserver:forKeyPath:、addObserver:toObjectsAtIndexes:forKeyPath:options:context:、removeObserver:fromObjectsAtIndexes:forKeyPath:

74.NSSet是一个广泛使用的集合,NSSet按Hash算法来存储集合中的元素,具有很好的存取和查找性能。NSSet不允许包含相同的元素,如果把两个相同的元素放在同一个NSSet集合中,则只会保留一个元素。

75.NSMutableSet继承了NSSet,代表了一个集合元素可变的NSSet集合,主要是在NSSet的基础上增加了添加元素、删除元素的方法,并增加了对集合计算交集、并集、差集的方法:addObject、removeObject、removeAllObjects、addObjectsFromArray、unionSet、minusSet、intersectSet、setSet

76.NSCountedSet是NSMutableSet的子类,它为每个元素额外维护一个添加次数的状态。

77.有序集合(NSOrderedSet与NSMutableOrderedSet)既有NSSet集合的特性又包含

NSArray类似的功能。

78.NSDictionary类似于java中的map集合,提供了类方法和实例方法来创建,传入参数

基本一致,类方法以dictionary开始,实例方法以init开头

79.谓词(NSPredicate)用来定义一个逻辑条件,通过该条件可执行搜索或内存中的过滤

操作,可以在集合中使用谓词对集合进行过滤。包含三个子类:NSComparisonPredicate、NSCompoundPredicate和NSExpression

80.谓词中可以使用占位符参数,类似于数据库中的存储过程。

81.文件管理使用NSFileManager类进行文件的创建、删除、移动和复制。要读取文件的内容需要通过NSFileHandle进行处理;如果要读取网络资源可以通过NSURL进行处理;如只是读取项目内部的资源,许使用NSBundle进行处理。

82.数据缓冲区(NSData和NSMutableData),NSData所包含的方法:bytes、getBytes:

length、getBytes:range、subdataWithRange、writeToFile:atomically、writeToURL:atomically

83.NSFileManager可以访问文件的属性和内容,也可以创建、删除、复制和移动文件,查看目录包含的内容,与java中的文件不同的地方时可以操作url的文件。

84.使用NSPathUtilities.h管理路径,包含了对NSString类的扩展,增加了一些专门用于操

作路径的方法

85.另外NSPathUtiliters还提供了一些常用函数来获取系统的相关属性:NSUserName()、NSFullUserName()、NSHomeDirectory()、NSHomeDirectoryForUser(user)、NSTemporaryDirectory()

86.可以使用ProcessInfo获取进行信息

87.使用NSFileHandle处理文件IO

88.使用NSURL访问网络资源,可以通过该类对URL地址进行解析,获取scheme、host、port、path等

89.NSBundle可以处理包含在项目中的资源文件

90.对象归档类似于java语言的序列化操作,就是用某种格式把一个或多个对象保存到指

定文件中,方便以后从文件中恢复他们。使用两个雷(NSKeyedArchiver和

NSKeyedUnarchiver)

91.如果程序要归档、恢复任意自定义类的实例,那么该类应该实现NSCoding协议

92.可以使用NSData完成自定义归档,一次性的收集多个对象,并将这些对象归档到当个

档案文件中。

iOS代理模式 篇6

就是你想做一件事但不想自己去做,你就需要制定一个代理,让这个代理帮忙去做,体现在代码上就是声明一个代理对象作为成员变量。需要作某些事情的时候调用该代理对象的方法。

下面的例子是住人想看电影需要知道电影票的相关信息,但是主人很懒,需要让仆人帮忙去搜集相关的信息将结果告诉住人。

Person.h

@interface Person : NSObject@property (nonatomic,strong) Servant * delegate;- (void) buyTicket;@end

Person.m

@implementation Person- (void) buyTicket{ NSLog(@“票价为%d的票还剩余%d张”,[_delegate ticketprice],[_delegate leftTicketCount]);}@end

Servant.h

@interface Servant : NSObject- (int) ticketprice;- (int) leftTicketCount;@end

Servant.m

@implementation Servant- (int)ticketprice{ //..... return 1;}- (int)leftTicketCount{ //..... return 1000;}@endMain

int main(int argc, const char * argv[]){ Person *p = [[Person alloc] init]; Servant *s = [[Servant alloc]init]; p.delegate = s; [p buyTicket]; return 0;}

打印:票价为1的票还剩余1000张

上面的代码虽然实现了这个功能,但是存在的问题是代码之间的耦合性太高。如果Servant类改变了,相应的需要修改Person类的内容。在iOS中通过协议实现代理。

想要减弱代码的耦合性,首先考虑Person类中声明的代理对象指针为万能指针而不是仅仅局限于限定某种类型的类,这样修改代理的类就不需要更改本类的内容,

即下面的代码声明

@property (nonatomic,strong) Servant * delegate;

改为

@property (nonatomic,strong) id delegate;

显然这样会导致Person.m类中的方法调用出错,因为_delegate成员是id类型的,编译器不知道他的方法有哪些。

因此可以将这两个方法抽成协议,在声明代理变量的时候限定其需要实现该协议,这样就不会报方法找不到的错误了,即:

@property (nonatomic,strong) iddelegate;

Person.h

@interface Person : NSObject@property (nonatomic,strong) iddelegate;- (void) buyTicket;@end

TicketDelegate.h

@protocol TicketDelegate@required- (int) ticketprice;- (int) leftTicketCount;@end

Servant1.h

//Servant1类实现TicketDelegate协议@interface Servant1 : NSObject < TicketDelegate >@end

Servant1.m

@implementation Servant1- (int)ticketprice{ //..... return 1;}- (int)leftTicketCount{ //..... return 1000;}@end

iOS面试题整理 篇7

@interface USER

{NSSTring *name;}

@end

a)self.name=@”abc”与name=@”abc”的区别?

b)self.name=[[NSSTring alloc]initWithString:@”abc”];中name的retainCount是多少?

c)补全setName:(NSSTring *)myName方法

d)这里用self.name访问了name属性,还可以用别的方法访问name属

性么?

2.UITableView中什么可以自定义?

3.view.bounds和view.frame有什么区别?

4.iOS中是怎样进行内存管理的?

5.简述分类与继承的区别。

6.简述CALayer与UIView的区别。

7.简述堆与栈的区别。

8.简述Delegate、KVO和NotificationCenter区别。

9.用预处理指令#define声明MAX(X,Y)和MIN(X,Y)。

10.试写出strCompare

11.对于一个字节(8bit)的变量,求其二进制中“1”的个数,要求算法的执

行效率尽可能地高。

12.求两个正整数的最大公约数,要求算法的执行效率尽可能地高。

13.如何判断两个单向链表是否相交?

14.能不能找到符合如下条件的9位数:

a)这个数包括了1-9这9个数字;

b)这个9位数的前n位都能被n整除,若这个数表示为abcdefghi,则ab

可以被2整除,abc可以被3整除„„abcdefghi可以被9整除。

15.说说autorelease和release 的区别?

16.如何下载图片?

17.微博的认证?

18.版本扩展?

19.程序调试?

20..(点)运算符?

21.UITableView中每一行都缓存图片的处理,如何处理才能在滑动时不会出现等

待的现象。

ios个人简历 篇8

二年以上工作经验|男|27岁(1989年11月24日)

居住地:南京

电 话:137******(手机)

E-mail:

最近工作[1年]

公 司:XX有限公司

行 业:计算机科学与技术

职 位:ios开发工程师

最高学历

学 历:本科

专 业:计算机科学与技术

学 校:南京

自我评价

1. 拥有丰富的ios项目开发经验;

2. 较强的系统设计能力及跟踪算法设计能力;

3. 精通ios编程及标定测试;

4. 较好的沟通与协调能力。

求职意向

到岗时间:立即到岗

工作性质:全职

希望行业:计算机科学与技术

目标地点:南京

期望月薪:面议/月

目标职能:ios开发工程师

工作经验

2014/12 — /12:XX有限公司[1年]

所属行业:计算机科学与技术

研发部 ios开发工程师

1. 参与项目执行,讨论项目执行流程;

2. 主导项目执行相关培训工作;

3. 随时跟进项目执行的进度及质量;

2013/10 — 2014/10:XX有限公司[1年]

所属行业:计算机科学与技术

研发部 ios开发工程师

1. 作为综合模块组长参与到项目实施中,主要负责前期准备工作,包括落实办公环境,项目人员入场,网络调研及网络整改等工作;

2. 负责综合模块管理及实施工作,包括业务调研与差异化分析工作,需求分析匹配工作,组织建模工作,系统部署,用户培训,权限管理,数据收集、导入及校核工作,试运行支持及建转运等工作;

3. 负责项目文档管理工作,撰写并核查项目各阶段产出文档等。

教育经历

/9— /6 南京 计算机科学与技术本科

证书

2009/12 大学英语四级

语言能力

ios就业前景 篇9

发展前景

学习一门技术的目的就是要掌握一门养家糊口的技能,而这个技能是否能够让你有足够的价值体现出来就是这门技术的前景了。而学习ios开发这门技术的前景是好是坏呢?我们来看下:

ios开发从就业这方面来说现在还是比较不错的,因为我们能够看到现在对ios开发人员的待遇还是非常高的,从最初的6-8千到现在的上万,可以看出ios开发人员的待遇是一直稳升不降的。而且从各大企业的招聘信息来看人才的缺口还是不小的。所以说学习ios开发课程从就业前景来看现在还是比较好的,所以可以多考虑下。

学习iOS开发,先要了解主要开发什么。其实主要是针对iOS平台开发应用软件和游戏软件。应用软件涉及种类广泛,如办公工具、通信工具、视频播放工具、阅读器等,在智能手机普及的今天,手机用户对于各种应用软件的需求越来越高。这个时候不但需要大量的iOS人才储备,还对其技术有了更高的要求。而手机游戏是目前最受年轻人喜爱的,趣味性更强,薪水也乐观。如此耀眼的舞台,自然给了年轻人更多发挥的空间,但这里要注意,学习iOS开发,需要对软件开发感兴趣,具备一定的计算机基础。

据了解,疯狂软件教育iOS培训零基础教学,没有基础的学员只要通过iOS基础班系统地训练即可掌握iOS技术基础,iOS培训主要培养学员理解软件开发过程,形成良好的编码习惯,能独立完成iPhone手机和iPad平板电脑上App 开发,积累一定的项目经验,能满足企业对iOS相关的人才需求。iOS培训毕业后能够胜任的岗位有:iPhone App 研发工程师、 iPhone App 测试工程师、 iPhone App 产品策划、iPhone App 产品经理/助理、iPhone App UI设计师、 iPhone App 产品运营管理。

ios简历项目怎么写 篇10

ios简历项目怎么写:

项目经历

2011/05 –2011/10

IOS项目图片处理、分享、点评程序

负责项目的整体架构设计及服务器端接口的开发

负责图片处理滤镜的设计实现、图片缩放、裁剪、旋转等效果的实现 

负责系统数据加密算法的实现

2010/08 –2011/04 基于IOS的“双扣扑克”游戏客户端

负责扑克游戏的整体UI的设计和用户接口逻辑的实现  负责服务器端游戏逻辑及接口的实现

负责游戏数据传输协议的设计及加密解密算法实现

2009/11 –2010/07 ANDROID项目

基于Google Android 1.0平台的样机开发

参与Calling模块的开发并负责RIL底层接口的改进设计 2007/11 –2009/10 XPIXL项目(ZN5)

基于摩托罗拉LJ6.3平台的高端手机  参与Messaging模块的设计开发

项目期间的工作表现获得Moto Bravo!Award

2007/05 –2007/10 YONGXING项目

基于摩托罗拉LJ7.2平台的中高端手机 

参与Messaging模块的改进设计

2007/01 – 2007/05 DRAGONFLY项目

基于TI的Locosto平台的低端手机

上一篇:学生《红楼梦》读书笔记下一篇:给予的快乐小学生作文