oc 实例变量可见度、方法

⼀、实例变量可⻅度

@public                   在类的外部和内部均可访问

@protected(默认)   只能在该类和其⼦类内访问

@private                  只能在该类内访问


⼆、⽅法(定义、声明、调用)

OC中的方法分两种:类方法、实例方法

 同一个类中,所有的方法中不能出现重名
 

方法的声明

- (返回值类型)方法名:(参数类型1)参数名1 修饰词:(参数类型2)参数名2

- (paraType)methodName:(paraType)paraName1 descripName:(paraType)paraName2


方法的调用

  类方法 + 只能类调用 [class_name class_method_name];

类方法中,不能使用实例变量(调用类方法时,没有创建对象)

+ (void)sayHi;

  实例方法 - 只能对象调用 [object_name instance_method];

- (void)sayHello;



三、setter、getter

setter:设置实例变量的值

- (void)setName:(type)name;

getter:获取实例变量的值

- (type)name;



OC2.0.setter

如果通过setter方法为对象设置初始值,需通过以下方式:

- (void) setOrigin: (XYPoint *) pt

{

     if (origin)

          [origin release];


     origin = [[XYPoint alloc] init];


     [origin setX: pt.x andY: pt.y];

}

原因:若不alloc,创建多个对象后,指针指向同一内存区域,修改某一个对象的origin将会改变所有对象的origin值。




四、自定义初始化方法

使用自定义初始化方法创建对象

创建对象后,不能再调用初始化方法

- (id)initWithName1:(type)name1 name2:(type)name2 …;


五、类的调用

#import "ClassName.h"

循环调用的产生:

A.h:    #import "B.h"

B.h:    #import "A.h"

编译器执行时,在#import 处出现死循环,永远执行不到@interface ,因此所导入的类不可被识别

防止循环调用

在 .h 文件中使用 @class  ClassName;   告知编译器class后面的标识符是一个类

在 .m 文件中 使用 #import 导入所需类所在文件


简答题:

 

1、实例变量的可见度有哪几种?默认的是什么?(中英文都要记)

@public @protected @private

2、如何对一个类的默认可见度的实例变量进行赋值和取值?

getter&setter method

3、面向对象编程的三大特征?

封装(保证了属性与方法的关联性)

继承(代码复用)

多态(在代码复用的同时,强化了个性差异)

4、什么是封装?

封装:对外提供声明,对内隐藏内部实现

5、#import有什么作用?#import和#include有什么不同?

#include 和 #import的区别

(1)include不能重复导入同一个文件

(2)import可以重复导入同一个文件

(3)现在include和import都可以重复导入

6、对象的内存分配在哪个区?

堆区

7、堆区和栈区的区别(从内存的分配和回收考虑)

栈区由系统负责分配和回收

堆区由开发者负责分配和回收

8、OC中的方法有几类?OC中有私有方法吗?

两类:类方法、实例方法

9、如何确定两个方法是否同名?

 

10、-(id)setName:(NSString *)name  :(NSString *)sex  age:(int)age的方法名是什么?

setName: : age:

11、定义并实现一个实例变量的setter和getter方法。

12、#import ” ”和#import < >有什么区别?

“” 导入用户文件

<> 导入系统文件

13、@class有什么作用?#import和@class有什么区别?

@class告知编译器系统class后面的标识符是一个类,并没有导入这个类的内容

#import导入文件的内容

你可能感兴趣的:(oc)