首页 > 代码库 > 工作中的简单总结

工作中的简单总结

//知识点说明 一、MVC 设计模式 M (Model-数据模型)用于存储数据的数据模型,以及NSArray,NSDictionary等存储数据的Fundation对象 V (view-视图)用于显示数据的视图,(UIView及其子类,还有我们自己封装的视图类等) C (Controller-控制器) (1、用于处理数据更新和视图更新的控制器,M和V之间没有必然的关联,C负责更新数据,然后在控制视图刷新,使视图显示新的数据  2、数据不变,但需要数据在不同的视图显示时,也通过控制器控制选择不同视图的加载  3、视图不变,需要显示不同的数据时,也是通过控制器控制视图加载不同的数据 )  二、NSUserDefaults  使用场景: 1.用于存储少量的,固定不变的数据,如用户名和密码或者一些程序的设置信息等 2.一个应用程序中只有一个NSUserDefaults,它实际上是一个存放在应用程序特定位置的一个plist文件 3.NSUserDefaults用于存储的数据类型相对固定,不能存储UIViewController、NSObject等类实例化的对象,对象的存储用归档方法  三、UITableViewCell的定制,步骤: 1.当系统自带的cell样式不能满足我们的开发需求时,需要子类化(继承)UITableViewCell,进行cell的定制 2.我们一般需要根据cell的需求,分析出定制cell需要哪些数据字段,根据需要的数据字段创建数据模型(一般继承NSObject创建) 3.根据cell的需求样式,子类化UITableViewCell,添加需要的视图到cell的contentView上. 4.在tableView所在的视图控制器上利用数据模型对cell进行内容填充.   四、UIViewController的生命周期: 1.- (void)loadView  首先执行的方法,如果此时ViewController没有视图,在这个方法中会创建self.view 2.- (void)viewDidLoad  此时视图已经加载完毕,可以在这个方法中添加后续的视图,这个方法一般情况下只会被调用一次  3.-(void)viewWillAppear:(BOOL)animated 当视图即将出现的时候调用此方法,此方法会被调用多次  4.-(void)viewDidAppear:(BOOL)animated  当视图已经出现的时候调用此方法,这个方法会被调用多次 5.-(void)viewWillDisappear:(BOOL)animated 当视图即将消失的时候调用此方法,这个方法会被调用多次 6.-(void)viewDidDisappear:(BOOL)animated 当视图已经消失的时候调用此方法,这个方法会被调用多次  7。-(void)viewDidUnload  在iOS6.0以前 当ViewController中开辟的内存到达一定限度时,会调用此方法,在此方法中,我们可以执行相关视图的卸载操作. iOS6以后不会调用此方法 8.-(void)dealloc   //此方法会执行视图控制器以及视图控制器对应属性的销毁,在此方法中,我们需要release 之前alloc的对象   五、retain,copy,assgin 的区别:  1. atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作。 2.atomic。设置成员变量的@property属性时,默认为atomic,提供多线程安全。// 在多线程环境下,原子操作是必要的,否则有可能引起错误的结果。加了atomic,setter函数会变成下面这样:   {lock}  if (property != newValue) {    [property release];      property = [newValue retain];   }   {unlock} 3. nonatomic。禁止多线程,变量保护,提高性能。 4. atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。//  指出访问器不是原子操作,而默认地,访问器是原子操作。这也就是说,在多线程环境下,解析的访问器提供一个对属性的安全访问,从获取器得到的返回值或者通过设置器设置的值可以一次完成,即便是别的线程也正在对其进行访问。如果你不指定 nonatomic ,在自己管理内存的环境中,解析的访问器保留并自动释放返回的值,如果指定了 nonatomic ,那么访问器只是简单地返回这个值。//   assign// 对基础数据类型 (NSInteger,CGFloat,BOOL)和C数据类型(int, float, double, char)等等。// 此标记说明设置器直接进行赋值,这也是默认值。在使用垃圾收集的应用程序中,如果你要一个属性使用assign,且这个类符合NSCopying协议,你就要明确指出这个标记,而不是简单地使用默认值,否则的话,你将得到一个编译警告。这再次向编译器说明你确实需要赋值,即使它是可拷贝的。//   retain// 对其他NSObject和其子类对参数进行release旧值,再retain新值// 指定retain会在赋值时唤醒传入值的retain消息。此属性只能用于Objective-C对象类型,而不能用于Core Foundation对象。(原因很明显,retain会增加对象的引用计数,而基本数据类型或者Core Foundation对象都没有引用计数——译者注)。  注意: 把对象添加到数组中时,引用计数将增加对象的引用次数+1。   copy// 对NSString 它指出,在赋值时使用传入值的一份拷贝。拷贝工作由copy方法执行,此属性只对那些实行了NSCopying协议的对象类型有效。 // copy与retain:// Copy其实是建立了一个相同的对象,而retain不是:   1.比如一个NSString 对象,地址为0×1111 ,内容为@”STR”,Copy 到另外一个NSString 之后,地址为0×2222 ,内容相同。   2.新的对象retain为1 ,旧有对象没有变化。retain 到另外一个NSString 之后,地址相同(建立一个指针,指针拷贝),内容当然相同,这个对象的retain值+1。   总结:retain 是指针拷贝,copy 是内容拷贝。 // assign与retain:// 1. 接触过C,那么假设你用malloc分配了一块内存,并且把它的地址赋值给了指针a,后来你希望指针b也共享这块内存,于是你又把a赋值给(assign)了b。此时a和b指向同一块内存,请问当a不再需要这块内存,能否直接释放它?答案是否定的,因为a并不知道b是否还在使用这块内存,如果a释放了,那么b在使用这块内存的时候会引起程序crash掉。// 2. 了解到1中assign的问题,那么如何解决?最简单的一个方法就是使用引用计数(reference counting),还是上面的那个例子,我们给那块内存设一个引用计数,当内存被分配并且赋值给a时,引用计数是1。当把a赋值给b时引用计数增加到2。这时如果a不再使用这块内存,它只需要把引用计数减1,表明自己不再拥有这块内存。b不再使用这块内存时也把引用计数减1。当引用计数变为0的时候,代表该内存不再被任何指针所引用,系统可以把它直接释放掉。     总结:上面两点其实就是assign和retain的区别,assign就是直接赋值,从而可能引起1中的问题,当数据为int, float等原生类型时,可以使用assign。retain就如2中所述,使用了引用计数,retain引起引用计数加1, release引起引用计数减1,当引用计数为0时,dealloc函数被调用,内存被回收。   六、代理的使用: //协议的声明,声明代理中包含的方法,并指明哪些是可选实现的方法,哪些是必须实现的方法 //代理方法的调用:代理方法的调用者(委托类)决定声明中的方法在什么样的时机被调用,并将delegate作为自身的属性,用于指向代理方法的实现者 //代理方法的真正实现: 代理方法的真正实现者会将自己的指针赋给代理方法调用者的delegate(delegate=self)属性,当调用者(委托类)调用到某个具体代理方法时,实现者进行代理方法的后续实现.  七、类方法(+)和实例方法(-):// +表示类方法,-表示实例方法   总结一下几点:// 1.类(static)方法// a. 类方法的调用// [类名称 类方法名称];// [Human   toString];//      注意:类方法// 1,类方法可以调用类方法。// 2,类方法不可以调用实例方法,但是类方法可以通过创建对象来访问实例方法。// 3,类方法不可以使用实例变量。类方法可以使用self,因为self不是实例变量。// 4,类方法作为消息,可以被发送到类或者对象里面去(实际上,就是可以通过类或者对象调用类方法的意思)。// // 2.实例方法// a.实例方法的调用// 首先需要实例化该类// Human *man = [Human alloc] init];// [类的实例  实例方法名称];// [man   showSex];   八、常用的开发网站:  //cocoaChina :http://www.cocoachina.com  (最大的中文iphone开发社区)  //github :https://github.com/ (源码共享网站)  //raywen:http://www.raywenderlich.com (支持中文版)  //stackover flow :http://www.stackoverflow.com (有解决不了的难题时,这这个网站可能会带给你惊喜) pk.loca/1313/sina.json */

 

 

工作中的简单总结