巩固作业
1、 手写3遍:定义Teacher类(自定义初始化方法、setter/getter方法、普通方法)、创建对象、访问实例变量、调用方法(包括@interface…@end @implemetation…@end)
2、
简答题:
1、 实例变量的可见度有哪几种?默认的是什么?(中英文都要记)
三种,@public,@protected,@private,默认是@protected
2、 如何对一个类的默认可见度的实例变量进行赋值和取值?
调用方法,通过方法对实例变量进行赋值和取值
3、 面向对象编程的三大特征?
封装,继承,多态
4、 什么是封装?
就是自己的实例变量在别的类中不可以直接调用和赋值
5、#import有什么作用?#import和#include有什么不同?
都是导入其他文件,#import可以防止重复导入。
import比起#include的好处就是不会引起交叉编译,在 Objective-C中,#import 被当成 #include 指令的改良版本来使用。除此之外,#import
确定一个文件只能被导入一次,这使你在递归包含中不会出现问题。
5、 对象的内存分配在哪个区?
堆区
6、 堆区和栈区的区别(从内存的分配和回收考虑)
堆区由操作员控制分配和释放的,栈是由系统自动分配内存和释放的;
7、 OC中的方法有几类?OC中有私有方法吗?
在类的前面加static,则只能在本模块中使用。
9、如何确定两个方法是否同名?
去掉参数名看看是否一样。
10、-(id)setName:(NSString )name :(NSString )sex age:(int)age的方法名是什么?
setName: : age:
11、定义并实现一个实例变量的setter和getter方法。
set+实例变量名(遵守驼峰命名法):参数为实例变量名,不要下划线
getter方法是 实例变量名,不要下划线。
12、#import ” ”和#import < >有什么区别?
“”是导入自己创建的文件。#import<.>是导入系统自带的文件。
“”从当前工程目录开始查询,如果没有再从系统配置的路径开始查找。<>从系统配置的文件开始查找
13、@class有什么作用?#import和@class有什么区别?
@class只是声明有一个类。而#import则是把整个类都导入进去
编程作业
1、从昨天作业中选择10个类,完善第一节课“自定义10个类”的作业,需求:
(1)所有实例变量的可见度修改为默认可见度。
(2)给所有的实例变量添加setter和getter。
(3)根据需求声明自定义初始化方法。
2、打僵尸。需求:
(1)定义普通僵尸类:
实例变量:僵尸总血量、僵尸每次失血量。
方法:初始化方法(总血量)、被打击失血、死亡。
(2)定义路障僵尸类:
实例变量:僵尸总血量、僵尸每次失血量,道具,弱点。
方法:初始化方法(总血量)、被打击失血、失去装备、死亡。
(3)定义铁桶僵尸类:
实例变量:僵尸总血量、僵尸每次失血量,道具,弱点。
方法:初始化方法(总血量)、被打击失血、失去装备、死亡。
(4)在main.m中创建一个普通僵尸对象,设置总血量50,每次失血量为 3,没有道具。
(5)在main.m中创建一个路障僵尸对象,设置总血量80,每次失血量为 2,设置道具为路障。
(6)在main.m中创建一个铁桶僵尸对象,设置总血量120,每次失血量为 1,设置道具为铁桶。
(7)在main.m中,使用while循环模拟打僵尸过程(每循环一次,打击3个僵尸,僵尸根据自己的失血量处理总血量),当所有僵尸都死亡时(僵尸的总血量减为0时,表示死亡),结束打僵尸即结束while循环