您的位置:首页 > 职场人生

黑马程序员——ios基础---练习:4

2015-09-11 22:49 411 查看
OC1----------------------------------------------------------------------

一,作业题:

1,OC包含头文件有几种方式?有什么区别?(面试题)

include 和 import
都是引入头文件

import引入的头文件,可以防止重复包含

include它是使用预处理指令防止重复包含,如果没有写预处理指令,则无法防止重复包含问题

2,NSLog能使用%s打印C的字符串吗?

不能使用Printf打印OC中的对象
(%@占位符不能用),没有结果。

1、NSLog 会自动换行 而printf不会自动换行

2、NSLog 会自动输出时间等项目信息,printf不会输出调试信息

3、NSLog 函数的参数是一个NSString 对象,printf是一个字符串常量指针

OC3----------------------------------------------------------------------

1,什么是类方法?请写代码说明?

#import <Foundation/Foundation.h>

@interface Person : NSObject

+(void)run;

@end

@implementation Person

+(void)run{

NSLog(@"person  run");

}

@end

int main(int argc, const char * argv[]) {

@autoreleasepool {

[Person run];

}

return 0;

}

2,设计一个学生类,

属性有:姓名,年龄,性别,成绩;

用setter设置器和getter访问器,进行赋值和取值;

顺便写出,set方法和get方法的命名规范;

typedef enum{

kSexMan,

kSexWoman,

}Sex;

#import <Foundation/Foundation.h>

@interface Student : NSObject{

NSString *_name;

int _age;

Sex _sex;

int _score;

}

-(void)setName:(NSString *)name;

-(NSString *)name;

-(void)setAge:(int)age;

-(int)age;

-(void)setSex:(Sex)sex;

-(Sex)sex;

-(void)setScore:(int)score;

-(int)score;

@end

#import "Student.h"

@implementation Student

-(void)setName:(NSString *)name{

_name = name;

}

-(NSString *)name{

return _name;

}

-(void)setAge:(int)age{

_age = age;

}

-(int)age{

return _age;

}

-(void)setSex:(Sex)sex{

_sex = sex;

}

-(Sex)sex{

return _sex;

}

-(void)setScore:(int)score{

_score = score;

}

-(int)score{

return _score;

}

@end

int main(int argc, const char * argv[]) {

@autoreleasepool {

Student *stu = [Student new];

[stu setName:@"王五"];

[stu setAge:23];

[stu setSex:kSexWoman];

[stu setScore:99];

NSLog(@"姓名=%@,年龄= %d,性别= %d,分数=%d",[stu name],[stu age],[stu sex],[stu score]);

}

return 0;

}

4,什么是对象与对象之间的依赖关系?(用代码举例说明)

比如学生用电脑玩游戏:

一个学生类Person;

一个电脑类Computer;

Person 类

#import <Foundation/Foundation.h>

#import "Computer.h"

@interface Person : NSObject

+(void)playGames:(Computer *)computer;

@end

#import "Person.h"

@implementation Person

+(void)playGames:(Computer *)computer{

[computer playGames];

}

@end

Computer 类

#import <Foundation/Foundation.h>

@interface Computer : NSObject

-(void)playGames;

@end

#import "Computer.h"

@implementation Computer

-(void)playGames{

NSLog(@"开始玩游戏");

}

@end

#import <Foundation/Foundation.h>

#import "Person.h"

int main(int argc, const char * argv[]) {

@autoreleasepool {

Computer *cpu = [Computer new];

[Person playGames:cpu];

}

return 0;

}

5,什么是对象与对象之间的关联关系?(用代码举例说明)

比如学生用电脑玩游戏:

一个学生类Person;

一个电脑类Computer;

Computer 类:

#import <Foundation/Foundation.h>

@interface Computer : NSObject

-(void)playGames;

@end

#import "Computer.h"

@implementation Computer

-(void)playGames{

NSLog(@"用电脑开始玩游戏");

}

@end

Person 类:

#import <Foundation/Foundation.h>

#import "Computer.h"

@interface Person : NSObject{

@public

Computer *_cpt;

}

-(void)playGames;

@end

#import "Person.h"

@implementation Person

-(void)playGames{

[_cpt playGames];

}

@end

#import <Foundation/Foundation.h>

#import "Person.h"

int main(int argc, const char * argv[]) {

@autoreleasepool {

Computer *cpt = [Computer new];

Person *per = [Person new];

per->_cpt = cpt;

[per playGames];

}

return 0;

}

6,下面程序有什么问题?

#import <Foundation/Foundation.h>

@interface Student : NSObject

{

int _score;

}

+(void)study;

@end

#import "Student.h"

@implementation Student

+(void)study{

_score = 10;

NSLog(@"学习成绩 %d",_score);

}

@end

类方法不能访问成员变量;

OC4----------------------------------------------------------------------

1.Self在类方法和对象方法使用的区别?

答:

self在类方法中使用,其指代的是当前类

self在对象方法中使用其指代的是调用当前方法的对象

注解:self使用总结

self 谁调用当前方法,self就代表谁

self 在对象方法中,self代表当前对象

self在类方法中,self代表类

2.变量的作用域有哪四种?

答:

(1)@piblic (公开的)在有对象的前提下,任何地方都可以直接访问。

(2)@protected (受保护的)只能在当前类和自雷对象方法中访问。

(3)@private (私有的) 只能在当前类的对象方法中才能直接访问。

(4)@package (框架级别的)作用域介于私有和共有之间,只要处于同一个框架中就可以直接通过变量名访问。

3、阅读下列代码

- (NSString *)description {

return [NSString stringWithFormat:@"%@", self];

}

此段代码最终导致程序的问题是( b )

1. 无输出结果

2. 程序陷入死循环

3. 循环引用

4. 无错误

4、oc中如何表示继承?写代码说明;(比如Student继承Person)

@interface Student : Person
用冒号表示继承;

5、继承体系中,方法调用的顺序是什么?

1、现在在自己类中找

2、如果没有,去父类中找

3、如果父类中没有,就去父类的父类中

4、如果父类的父类也没有,就还往上找,直到找到基类(NSObject)

5、如果NSObject都没有就报错了

6、有一个学生,学习累了的时候,就用电脑玩会游戏;

当学习到第三次或者第五次的时候,就用电脑玩游戏放松一下;

设计一个学生类Student;

有一个学习的方法:study

有一个学习的次数:time

有一个电脑类:Computer

电脑有个玩游戏的方法playGames;

要求:在类中加入私有变量和私有方法来实现。

Computer 类:

#import <Foundation/Foundation.h>

@interface Computer : NSObject

-(void)playGames;

@end

#import "Computer.h"

@implementation Computer

-(void)playGames{

NSLog(@"用电脑开始玩游戏");

}

@end

Student 类:

#import <Foundation/Foundation.h>

#import "Person.h"

@interface Student : NSObject

-(void)study;

@end

#import "Student.h"

#import "Computer.h"

@implementation Student

{

//私有变量

int _time;

}

-(void)study{

_time += 1;

if(_time == 3 || _time == 5){

Computer* cpt = [Computer new];

[self playGames:cpt];

}else{

NSLog(@"我在学习,这是第%d次",_time);

}

}

//私有方法

-(void)playGames:(Computer *)cpt{

if (cpt) {

[cpt playGames];

}

}

@end

Main 函数;

#import <Foundation/Foundation.h>

#import "Student.h"

int main(int argc, const char * argv[]) {

@autoreleasepool {

Student *stu = [Student new];

[stu study];

[stu study];

[stu study];

[stu study];

[stu study];

}

return 0;

}

C5-------------------------------------------------------------------------

1、
点语法的本质是( C )

A、访问成员变量

B、调用对象方法

C、转为set/get方法

D、赋值或者取值

2、
声明属性的关键字是( A )

A、@property B、@synthesize C、@private D、@interface

3,Student *stu = [[Student alloc] init];

// 设置age的值

stu.age = 10; 这句话编译器会翻译成什么?请解答。

答:[stu setAge : 10 ];

4,int age = stu . age ;

同上,这句话编译器会翻译成什么?请解答。

答:int age = [ stu age ];

5,- (void)setAge:(int)newAge {

self.age = newAge;

}

根据所学的知识,判断这个方法会存在什么问题?

会造成死循环。

self.age = newAge;

会被编译器翻译成: [ self setAge : newAge ];

6,请简述@property
在 Xcode4.4之前和Xcode4.4之后的区别?

@property在4.4之前,值作为方法的声明,需要和@synthesize配合使用;

@property在4.4之后,进行了增强,如果在.m文件中不写@synthesize的时候,它即代表声明,也代表实现。

7, 1)-(BOOL) isKindOfClass: classObj;

2)-(BOOL) isMemberOfClass: classObj ;

3)+(BOOL) isSubclassOfClass:classObj ;

这三个方法分别有什么作用?请写代码测试说明。

1,-(BOOL) isKindOfClass: classObj 判断实例对象是否是这个类或者这个类的子类的实

例。

2,-(BOOL) isMemberOfClass: classObj 只判断这个对象是否是这个类的实例,不管这个类的子类实例。

3,+(BOOL) isSubclassOfClass:classObj 这是一个静态方法,判断类是否是指定类的子类;

8, 1)-(BOOL) respondsToSelector: selector;

2)+(BOOL) instancesRespondToSelector:selector;

这两个方法分别有什么作用?请写代码测试说明。

1, -(BOOL) respondsToSelector: selector 判断实例是否有这样方法

2,+(BOOL) instancesRespondToSelector: 判断类是否有这个方法。此方法是类方法, 不能用在类的对象

9,设计一个“学生”的类

属性:年龄、姓名

行为:输出年龄和姓名;

使用点语法设置和获取值。

#import <Foundation/Foundation.h>

@interface Student : NSObject{

int _age;

NSString *_name;

}

@property int age;

@property NSString* name;

-(void)print;

@end

#import "Student.h"

@implementation Student

-(void)print{

NSLog(@"name = %@,age = %d",_name,_age);

}

@end

int main(int argc, const char * argv[]) {

@autoreleasepool {

Student *stu = [Student new];

stu.name = @"张三";

stu.age = 23;

[stu print];

}

return 0;

}

10,设计一个“学生”的类

属性:年龄、姓名

行为:输出年龄和姓名;

使用自定义构造方法,创建不同的对象。

使用点语法获取值。

#import <Foundation/Foundation.h>

@interface Student : NSObject{

int _age;

NSString *_name;

}

@property int age;

@property NSString* name;

-(instancetype)initWithName:(NSString *)name andAge:(int)age;

-(void)print;

@end

#import "Student.h"

@implementation Student

-(instancetype)initWithName:(NSString *)name andAge:(int)age{

self = [super init];

if (self) {

_name = name;

_age = age;

}

return self;

}

-(void)print{

NSLog(@"name = %@,age = %d",_name,_age);

}

@end

int main(int argc, const char * argv[]) {

@autoreleasepool {

Student *stu = [[Student alloc] initWithName:@"张无忌" andAge:23];

[stu print];

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: