首页 > 代码库 > 黑马程序员-OC总结

黑马程序员-OC总结

------- IOS培训、android培训、java培训、期待与您交流! ----------

 
1.import的作用
  impor是导入外部文件或框架,跟include功能相同,但是import的优点是可以防止重复导入。

2.说一下面向对象,面向对象有哪些特性,分别说一下
    面向对象:面向对象简称OOP,在解决问题时我们只关心解决此方法的工具,也就是对象,不关心解决此方法的过程。
  特性:有三个特性:
    封装:封装是为了防止外界直接访问或修改对象的成员变量,提高了程序安全性。
    继承:子类继承父类,子类完全拥有父类的成员变量或方法。减少了代码量,提高了类之间的联系。
    多态:某一类事物的多种形态,例如我们可以通过父类调用子类方法。减少了代码量,提高了工作效率。
  
3.OC方法与C函数的区别
    1>OC方法归对象所有,C函数是归整个程序所有。
    2>OC方法可以访问对象的成员变量,而C函数不能访问成员变量。
    3>函数不能写在@interface 和 @end之间。
 
4.OC对象方法与OC类方法的区别
     1>对象方法以—开头,类方法以+开头。
     2>对象方法可以访问成员变量,类方法不能访问成员变量。
     3>对象方法由对象调用,类方法由类调用。
     4>对象方法可以传递参数,类方法不能传递参数。

5.self与super的用法
    self是一个指针,指向了方法的调用者,如果是对象调用,则指向对象,如果是类调用,则指向类
    super是调用父类方法,一般用于在重写父类方法的时候需要保留某些方法。

6.成员变量的作用域 
    @private:代表成员变量只能被当前类直接访问。
    @protected:代表成员变量能被当前类或子类直接访问,是默认属性。
    @public:代表成员变量能在任何地方被直接访问。
    @package:代表成员变量只能在同一框架内直接被访问。

7.重写description方法的作用
    更改NSLog显示在屏幕上的格式。
   -description默认是以类名:内存地址 显示
   +description默认是以类名显示。

8.说一下万能指针,点语法
   万能指针:就是id,它可以指向任何对象,相当于NSObject *
  点语法:是成员变量的setter和getter方法的简写。如果通过点语法赋值,则是setter方法,如果通过点语法返回某个值,则是getter方法。

9.@property与@synthesize的用法
   @property:
        1>可以自动声明成员变量的setter和getter方法。在XCODE4.5以后还可以自动实现变量的setter和getter方法。
        2>可以自动生成下划线_加成员变量名的成员变量(eg:_age),类型是@private。
        3>@property 是在头文件中使用。
   @synthesize:
        1>可以自动实现成员变量的setter和getter方法。
        2>可以自动生成成员变量名(eg:age),且类型是@private。
        3>@synthesize是在.m文件中使用。
 
10..h和.m文件的分工
       .h:此文件是声明有哪些方法和成员变量 。
      .m:此文件是实现变量的方法。

11.内存管理的管理范围、原理、原则、体现在哪些地方
      管理范围:所有继承NSObject的对象。
      原理:通过引用计数器是否为0进行判断,如果某个对象的引用计数器为0,则此对象已经被回收,否则没有被回收
      原则:1>如果谁想使用某个对象,则需要对对象进行retain操作。
                2>如果谁想释放某个对象,则需要对对像进行release操作。
                3>谁retain,谁release,谁alloc,谁release。
      体现:1>@perproty参数方面,拥有retain、assign和copy。retain和copy会对对象的引用计数器+1;
                2>autorelease方面。会对对象池中的所有对象进行一次release操作。

12.@property的参数有哪些,他们的作用分别是什么?
      set内存管理方面:
            retain:对旧值进行release,对新值进行retain操作。
            assign:说明不需要进行内存管理,直接赋值
            copy:release旧值,copy新值。
      是否需要setter和getter方法方面:
           Readwrite:需要setter和getter方法。
           Readonly:只需要getter方法。
      方法名方面:
           setter = 方法名。设置setter方法名
           getter = 方法名。设置getter方法名
     多线程方面:
          nonatomic:不需要多线程,高性能。
                atomic:使用多线程,性能较低。
 
13.autorelease的作用、好处、注意
        作用:1>将所有对象加入自动释放池中。
                   2>当池销毁时会对池中所有对象进行一次release操作。
                   3>会返回对象本身。
                   4>不会影响对象引用计数器。
 
        好处:1>不需要关心对象释放时间。
                   2>不需要关心何时使用release。
 
       注意点:1>如果程序占用内存较大,则不使用autorelease。
                     2>如果程序占用内存较小,则使用autorelease影响不大。

14.什么是分类(category)?分类与继承的区别?
   分类:分类是在不更改原有类成员变量和方法的情况下,给原有类增加方法。
   分类与继承的区别:
      1>分类只能增加方法,不能增加成员变量;
           继承是子类完全拥有父类的成员变量和方法,还可以在父类的基础上增加自己的成员变量和方法。
 
      2>分类方法名如果和原有类的方法名相同,则分类的方法会覆盖原有类中的方法。
           继承下子类中的方法名不能和父类中的方法名相同。

15.说一下什么是协议(protocol)?以及其中协议中的两个关键字?
    协议是用来声明多种方法,以方便其它类能够随时调用,提高了程序编写效率。
   @required:说明此方法必须被实现,如果不被实现就会发出警告。
   @optional:说明此方法可以被实现,也可以不被实现。

16.说一下你对代理的理解
   定义:为其它对象提供一种代理以用来控制这个对象。
     eg: 小明不想做饭,因此请了个保姆,但是请保姆需要签一份协议,保姆需要遵守协议。所以保姆就是代理,代理需要遵守某个协议。
   条件:如果要成为代理,则必须遵守某个协议(协议用于声明方法,限制代理必须拥有某个方法)。
   作用:可以监听某个方法是否被触发。
   优点:耦合性较低,增加了代码的弹性。
       eg:代理被删除了,但是Person还在。代理和对象之间互不影响。
 
17.block的作用,与函数有什么异同
       作用:block用于保存一段代码,方便程序随时调用
       与函数相同点:1>都有返回值
                                 2>都有形参
                                 3>调用方法相同
                                 4>都可以保存代码
 
       与函数不同点:1>blok的标志是^,而函数没有
                                 2>block默认情况下不能修改局部变量值,函数可以。
                                 3>在block情况下,当语句结束时,需要在大括号外部添加分号,而函数不需要。

18.@class与#import有什么区别
         1>@class只是在.h文件中声明有某个类,并不知道此类的成员变量和方法。
               #import可以被导入文件的所有信息,包括成员变量和方法。
         2>使用@class时,如果同时导入上百个文件,一旦被导入文件有所更改,则只需更改头文件,不需重新编译,效率较高。
             如果使用#import,则需要重新编译,效率较低。
         3>如果在.m文件中需要调用某个类的成员变量和方法,则需要#import导入。

19.常用的结构体有哪些?
    NSRange:表示范围。
    NSPoint/CGPoint:表示点位置
    NSSize/CGSize:表示UI的尺寸大小
    NSRect/CGRect:表示UI的位置和尺寸大小

20常用的类以及集合
   常用类:NSString/NSMutableString
   集合:NSArry/NSMutabArry(有序)、NSSet/NSMutableSet、NSDictonary/NSMutableDictonary、NSDate、NSObject

21.copy与retain的区别?
   浅拷贝情况下:copy就是retain。
   深拷贝情况下:copy会产生新对象,源对象引用计时器不变,副本计数器加1.

 

22.遍历集合有几种方式?分别说一下
    有三种方法遍历:
        方法一:普通遍历:
1 for (int i=0; i<array.count;i++)  2       {  3     NSLog(@"%@",array[i]);  4      }  

  方法二:快速遍历

1 for (id obj in array)  2    {  3         NSLog(@"%@",obj);  4      } 

方法三:block遍历

1 [array enumerateObjectsUsingBlock:  2      ^(id obj,NSUInteger idx, BOOLBOOL *stop)  3    {  4       NSLog(@"index = %d,元素 = %@",idx,obj);  5        if ( idx = 0)  6         {  7      *stop = YES;// 停止遍历  8        }  9          }  ];  
23.NSValue与NSNumber的区别
    1>NSNumber是NSValue的子类。
    2>NSNumber只能包装基本数据类型,而NSValue可以包装任意类型,例如字符、数组、结构体等。

 

黑马程序员-OC总结