黑马程序员-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方法。

[email protected]与@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操作。

[email protected]的参数有哪些,他们的作用分别是什么?
      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情况下,当语句结束时,需要在大括号外部添加分号,而函数不需要。

[email protected]与#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可以包装任意类型,例如字符、数组、结构体等。

时间: 2024-08-07 10:52:12

黑马程序员-OC总结的相关文章

黑马程序员——oc语言学习心得—— 属性声明和赋值

黑马程序员——oc语言学习心得—— 属性声明和赋值 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1,在oc中所有类继承与终极父类Object2,声明字符变量采用N是string  *_xxx 实例变量一般以下划线开头3,在oc中方法以+ -号区分 -号开头是实例方法或对象方法  +号开头是类方法  前置用对象调用 后者用类名调用4,在xcode4以后声明@property 不用在写@snysize  自动生成get.set方法5,属性

黑马程序员-OC内存管理 @property的增强

涉及到内存管理,只读,多线程等很多功能时,setter和getter方法也就没那么简单了:当然@property依然强大,很好用: 1:内存管理相关参数: *:retain:  (如果是oc对象类型),生成的setter会自动release旧值,retain新值: *:assign:(适用于非oc对象)  这个是默认的值 *:copy:release旧值,copy新值: @property (retain) NSString *name; // 同类型的参数不能同时写 // @property

黑马程序员-OC self super isa指针

self指针: self是oc面向对象设计中的一个特殊指针,相当于java中的this,但是比this强大,this只能访问实例对象的相关方法和成员变量,或者说this只代表实例对象: self不仅可以代表实例对象,还可以代表类对象:谁调用当前方法,self就代表谁:如果self用在了以"-"号的方法中,也就是对象方法中,那么就代表实例对象,若果在"+"号开头的方法中,self就代表类对象,因为只有类对象才能调用以"+"号开头的方法: self调

黑马程序员 oc与c的区别,联系

1.文件的扩展名的区别       1>c语言源文件的扩展名是.c,而oc的扩展名是.m       2>c语言经过编译之后得到的目标模块扩展名是.obj,而oc编译之后是.o       3>c语言目标程序与其他目标程序和库函数经过连接得到可执行文件的扩展名是.exe,而oc是.out2.两者的编程思想是不同的        c语言是面向过程的编程语言,oc是面向对象的编程语言3.oc语言对于c语言的拓展       oc是面向对象的编程语言,它的基本数据类型比c语言多了个bool类型

黑马程序员-OC学习笔记之Foundation框架NSNumber、NSValue和NSDate

---------------------- IOS开发.Android培训.期待与您交流! ---------------------- 一.NSNumber 前几篇笔记中,小桥复习了Foundatio框架中的几个类,这三个是OC学习的尾声了. 小桥已经复习过OC数组类NSArray,也说过它只能存放OC的对象,对于基本的数据类型确无能为力,但是实际编程中经常要把基本的数据如int.float,结构体存放的OC数组中,怎么办?这里的NSNumber就有用了,它能够把基本数据类型包装成OC对象.

黑马程序员-OC面向对象继承关系和组合关系笔记

继承关系是描述类和类之间的关系,两个类分别称为子类和父类,子类继承了父类,子类就拥有了父类的属性和方法: 继承的关系特点描述出来就是:** "是" **  (例如:学生类 是 人类) 组合关系描述的语句是:**** "拥有" ***  (例如:学生有成绩这个属性,而成绩属性本来就是一个成绩类的对象 ) 继承示例代码: #import <Foundation/Foundation.h> //Animal类的声明 @interface Animal : NS

黑马程序员-OC学习笔记之block

过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9426    Accepted Submission(s): 4151 Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做par

黑马程序员-oc对象的内存管理

oc没有java的垃圾回收机制,所以对象的内存释放很重要,基本数据类型,我们不用理会,编译器会处理: oc的每个对象内部都由一个计数器,用来记录当前有几个指针在指向该对象:当计数器为0时该对象会从内存中释放: 相关方法和概念: 1:retain:对象方法,调用该对象方法,计数器+1,有返回值,返回对象本身: 2:release:没有返回值,计数器-1: 3:retainCount:获取当前计数器的值: 4:dealloc:当对象被回收时,就会调用该方法,覆盖该方法时一定要调用[super dea

黑马程序员—oc语言学习心得—block

黑马程序员—oc语言学习心得—block -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1,程序一般用typedef定义一个block类型 然后调用 typedef void(^xxx)(); 可使用助记符 inlineblock 2,Block内部可以访问外部变量:默认情况下,Block内部不能修改外部的局部变量 给局部变量加上__block关键字,则这个局部变量可以在block内部进行修改. 3,block的作用: 利用block封

黑马程序员-OC学习笔记之ARC

---------------------- IOS开发.Android培训.期待与您交流! ----------------------一.什么是ARC        ARC是自动引用计数,苹果官方在Xcode4.2及以后版本中加入的一个内存管理机制,完全取代了程序员人工的内存管理,使得程序员只须关心程序本身.使用ARC,编译器会自动在代码中加入内存管理代码,是一个编译器特性,而不是运行时特性,当然,它也和JAVA的垃圾回收不同,它的本质和手动的内存管理是一样的,只是这些代码编译器会自动添加.