程序员是怎么炼成的---OC题集--练习答案与题目(1)

一、
1. 定义3个类,全部代码。效果:能默写,关键词全部正确。

2. ⾯面向对象和⾯面向过程有什么区别?

答:面向对象以事物(对象)为核⼼,完成事件只是一个任务。面向过程以事件为核心,为了完成任务,进行逐步实现。

3.什么是类?什么是对象?类和对象有什么关系?举例说明?
答:类是一组具有相同特征和⾏行为的事物的抽象。 对象是有类型的具体的实体。
类是对象的抽象,对象是类的实例。

4.OO是什么?OOP是什么? 答:OO是⾯面向对象。OOP是⾯面向对象编程。

5,OC中的类是如何定义的? 答:OC中定义类分为两部分: 接⼝口部分:声明了类名,⽗父类名,实例变量,⽅方法。
实现部分:包含了⽅方法的实现。

6,如何创建⼀一个对象?
答:创建对象分为两步:分配内存空间和初始化。

7,实例变量的可⻅见度有哪⼏几种?默认的是什么?
答:@private @protected     @public

8,如何对一个类的实例变量进⾏行赋值和取值? 答:添加setter⽅方法进⾏行赋值;添加getter⽅方法进⾏行取值。

9,⾯面向对象编程的三⼤大特征?
答:继承、封装、多态。

10. 什么是封装?简述封装的特点。 答:把实现细节隐藏起来的机制。使⽤用更加简单;变量更加安全;可以隐藏内部实现细节;开发速度加快。

11. #import有什么作⽤用?#import和#include有什么不同?

答:预处理程序在系统中寻找指定的文件,把该⽂件的内容拷贝到程序中出现#import语句的确切位置。 #import可以防止重复编译,#include只能引⼊一次。但是在xcode4.5之后,编译器对#include的重复编译进⾏了的处理。

12. 对象的内存分配在哪⼉儿?内存⼤大⼩小如何确定?

答:分配在堆中。 内存⼤大⼩小由对象中的实例变量决定,即所有实例变量所占字节数的 总和就是对象的内存⼤大⼩小。

13. OC中的方法有几类?OC中有私有方法吗? 答:+静态方法 -动态方法  oc中的方法都是公有的.

14. 如何确定两个方法是否相同?

答:任意两个方法,如果都是实例方法或者都是类方法,方法名相同即认为是同⼀个⽅法。

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

答: setName::age: 定义并实现一个实例变量的setter和getter方法。

16,写出Xcode的快捷键:

1、创建新工程,command+shift+N  2、创建添加一个新文件,command+N  3、程序运行,command+R
4、程序编译,command+B  
5、切换历史上/下一个文件,command+control+左右键
6、切换当前文件的头/实现文件,command+control+上下键 7、双斜杠注释;
command+. 8、文件内搜索;
command+F  9、光标移动到行头、行尾;command+左/右  10、以单词为单位移动光标。option+左/右


1. OC中的类是如何定义的?答:声明部分  @interface 类名:父类 @end    实现部分:@implementation  类名     @end

2. #import ” ”和#import < >有什么区别?

答:<>是从系统路径查找,“”先从工程文件路径中查找,找不到再从系统路径查找。

3. @class有什么作⽤用?#import和@class有什么区别?

答:@class在类的接口文件中,告诉编译器某个字段作为类名使用。避免交叉编译引起错误和减少不必要的编译时间。

#import是将一个文件的全部内容拷贝到当前文件,@class是指明某个字段作为类名使用。

4. OC中能不能多继承?子类继承得到了哪些内容?OC中的根类是什么?

OC中不能多继承,子类继承得到了所有非私有成员,OC中的根类是NSObject

5. 自定义一个类的便利构造器方法。-(void)setName:(NSString*)name andAge:(int)age
6. id是什么?作⽤用是什么?

答:id是一个指向任意类型对象的指针,存储任意类型对象。用于实现多态和动态类型识别和绑定。

7. self和super的作⽤用?
答:self调⽤用本类的方法,super调用父类的方法。

8. 解释属性的特性(nonatomic,atomic,readwrite,redonly,setter=,getter=)
都有什么作⽤用?

assign、retain、copy分别能修饰哪些属性?这些属性的特性,默认的都是哪些?

nonatomic 说明属性的原子的,非线程安全的,不用考虑线程问题,atomic 说明属性具有原子特性,线程安全的

readwrite说明属性是可读可写的,系统默认都是这个特性,readonly属性是只读的,不能赋值,只能读取.

setter=  为setter属性起别名,getter=为getter起别名

assign是系统默认的,修饰基本数据类型   retain 修饰对象数据类型   copy修饰的对象必须实现NSCopying协议

(9)定义一个完整的类,要求:
声明4个属性,一个基本数据类型,三个对象类型;
三个对象类型的属性分别使用assign、retain、copy修饰。
实现三个对象类型的属性对应的setter方法。使用点语法给变量赋值,从变量取值。

写一个people类,在.h文件中声明部分如下

@interface People : NSObject
@property (nonatomic)NSInteger age;
@property (nonatomic,assign)NSString *name;
@property (nonatomic,retain)NSString *gender;
@property (nonatomic,copy) NSString *adderss;

-(void)setAge:(NSInteger)age;
-(void)setName:(NSString *)name;
-(void)setGender:(NSString *)gender;
-(void)setAdderss:(NSString *)adderss;

实现部分

-(void)setName:(NSString *)name
{
    _name=name;
}
-(void)setAge:(NSInteger)age
{
    _age=age+10;
}
-(void)setGender:(NSString *)gender
{
    _gender=gender;
}
-(void)setAdderss:(NSString *)adderss
{
    _adderss=adderss;
}
使用点语法给变量赋值,从变量取值。

在main函数中实现

People *p=[People new];
        p.name=@"zhangSan";
        p.age=23;
        p.gender=@"男";
        p.adderss=@"河南";
        NSLog(@"name=%@,age=%li,gender=%@,address=%@",p.name,p.age,p.gender,p.adderss);

运行结果如下:

程序员是怎么炼成的---OC题集--练习答案与题目(1)

(10)如何判断一个对象是否能响应某个方法。

方法一:实例方法 respondsToSelector:判断方法是否属于某个类

People *p=[People new];
       if ([p respondsToSelector:@selector(getAge)]==YES)
       {
           NSLog(@"yes");
       }
方法二:静态方法instancesRespondToSelector:用于判断该类是否能响应某个消息

if ([People instancesRespondToSelector:@selector(getAge)]==YES)
       {
           NSLog(@"yes");
       }

(11)如何判断一个对象是否是某个类型。

第一种方法:自己想的比较怪异

People *p=[People new];
        if ([NSStringFromClass([People class]) isEqualToString:NSStringFromClass([p class])])
        {
            NSLog(@"%@", @"yes" );
        }
第二种方法:

if ([p isKindOfClass:[People class]] )
        {
            NSLog(@"%@", @"yes" );
        }

第三种方法:
        if ([p isMemberOfClass:[People class]] )
        {
            NSLog(@"%@", @"yes" );
        }

第二三种方法有区别

- (BOOL)isKindOfClass:(Class)aClass
Description    
Returns a Boolean value that indicates whether the receiver is an instance of given class or an instance of any class that inherits from that class. (required)

- (BOOL)isMemberOfClass:(Class)aClass
Description    
Returns a Boolean value that indicates whether the receiver is an instance of a given class. (required)

可以看出isKindOfClass:的作用域比较宽,子类 isKindOfClass:父类 也是true;而isMemberOfClass,对象必须是直接实例

上一篇:7.HBase In Action 第一章-HBase简介(1.2.1 典型的网络搜索问题:Bigtable的起原)


下一篇:Java 并发专题 :FutureTask 实现预加载数据 在线看电子书、浏览器浏览网页等