OC部分知识点罗列

来源:互联网 发布:京东罗盘数据 编辑:程序博客网 时间:2024/05/01 12:09

OC部分知识点罗列

         

          1、什么是方法名?什么是方法类型?

         方法名,去掉参数、去掉返回值,剩下的所有是方法名。

         例如:-idsetName:(NSString*)name:(NSString*)sex age:(int)age

         方法名为:-setName::age;

         

          2、一个对象调用autorelease 看他什么时候释放?

          

           [str autorelease];

           等出池后即倒序释放。

         

          3、协议关键字默认

            在代理delegate中,属性关键字为assign

            首先delegate要使用assign而不是retain,这个问题大家通过看iOSapi就可以了,最典型的是tabView里面的delegatedatasource都是用的assign

         

             那为什么要使用assign而不是retain呢?

         

             其实这个问题从很多方面可以说通的。

         

             首先,考虑类的设计模式,类与类之间大体关系有继承和聚合的关系,当我们使用聚合的时候该对象就拥有聚合的对象,这时候我们就需要retain使引用计数器+1来控制该对象的内存管理,所以我的感觉retaincopy的一项能力就是拥有该对象的内存管理权。

             下面就得说delegate了,一个对象没必要管理自己delegate的生命周期,或者说没必要拥有该对象,所以我们只要知道它的指针就可以了,用指针找到对象去调用方法,也就是委托实现的感觉。

         

             或者我们换个角度,从内存管理方面也可以解释这个问题。delegate的生命周期不需要让该对象去控制,如果该对象对其使用retain很可能导致delegate所指向的对象无法正确的释放。

         

          4、字典集合的关键字

             key-value无序排列。

         

          5、关于类的描述

             类的接口部分可以包含实例变量、属性和方法。

             可以把声明和实现都放到.h文件中。

             一对文件(.h.m)可以定义多个类。

         

          6、什么是类目?

             category

             category内不能定义实例变量;

             category内方法与母类中方法是平等地位;

         

          7、什么是对象,如何确定一个是不是对象?

             抽象的类,具体的对象。

         

          8、属性的属性assign retain copy区别与联系?

            assign:多数情况下用于基本变量类型;

            retain:用于对象类型;

            copy:用于遵守NSCopying协议的对象类型;

         

          9setter方法内部不能用setter递归调用

             禁止在setter方法里面使用点语法,因为点语法本身就是set方法,这样造成了递归调用。

         

          10、可变字符串跟不可变字符串的区别,可变字符串改的还是自己。

             这里需要注意的是,当空间足够的时候,改变前后地址相同。

         

          11、字典里面key是唯一的,当key的时候,新value会覆盖旧value

              这点在读写程序时候容易忽略。

         

          12、类方法里面不能使用实例变量。

              因为类方法是向类发送消息,实例变量是对象的实例变量。

         

          13delloc方法什么时候调用,以及其意义。

              retainCount<1的时候,系统会自动调用dello方法。

         

          14、内存管理。

              如何取管理内存?

              内存管理遵循的原则?

         

          15、初始化方法是用来做什么的?

              初始化方法是用来给给变量赋初值的。不要把初始化方法跟alloc开辟空间搞混了。

         

          16、如何去声明一个Block变量?

              区别声明一个Block与定义一个block

              声明 BOOL(^block)(NSString*,NSString*)

              定义 BOOL(^block)(NSString*,NSString*)=^BOOL(NSString *str1,NSString *str2)

                   {

                   return [str1 isEquleToString:str2];

                   }

         

          17、属性的setter方法实现。

              注意retaincopy的方法实现。

         

          18、便利构造器如何去写?

              +(Student*)studentWithName:(NSString*)name

         {

         Student *stu=[[Student alloc]initWithName:name];

         return [stu autorelease];

         }

         

          19、如何autorelease对象?

         

         给需要释放的对象发送autorelease消息,然后一起放入释放池

         [stu autorelease]

        

          20id是一个指向任意对象类型的指针。


0 0
原创粉丝点击