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

来源:互联网 发布:ubuntu touch 平板安装 编辑:程序博客网 时间:2024/06/03 09:21

OC1----------------------------------------------------------------------

一,作业题:

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

  include import都是引入头文件

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

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


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

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

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

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

  3NSLog 函数的参数是一个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. 无错误

  

 

 

 

4oc中如何表示继承?写代码说明;(比如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

 

 

 

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

// 设置age的值

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

 

答:[stu setAge : 10 ];

 

 

 

 

4int  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之后的区别?

 

@property4.4之前,值作为方法的声明,需要和@synthesize配合使用;

@property4.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; 

}





0 0
原创粉丝点击