黑马程序员——ios基础---练习:4
来源:互联网 发布:ubuntu touch 平板安装 编辑:程序博客网 时间:2024/06/03 09:21
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;
}
- 黑马程序员——ios基础---练习:4
- 黑马程序员——ios基础---练习:1
- 黑马程序员——ios基础---练习:2
- 黑马程序员——ios基础---练习:3
- 黑马程序员———ios基础
- 黑马程序员——c语言基础:循环结构练习
- 黑马程序员—java基础_异常多态练习
- 黑马程序员—字符串练习
- 黑马程序员——IOS基础(OC基础)
- 黑马程序员——ios基础---Objective-C:基础语法
- 黑马程序员--ios基础
- 黑马程序员---ios基础
- 黑马程序员——IOS基础——Block
- 黑马程序员——IOS基础——Protocol协议
- 黑马程序员——IOS基础——Copy
- 黑马程序员 ——ios基础 ——循环结构
- 黑马程序员 ——ios基础 ——函数
- 黑马程序员 ——ios基础 ——字符串
- 黑马程序员——ios基础---练习:3
- JSDoc3使用路径名
- 3.Longest Substring Without Repeating Characters
- 好记性不如好博客
- CentOS下yum安装 Nginx
- 黑马程序员——ios基础---练习:4
- 第98讲:使用SBT开发时动手解决rt.jar中CharSequence is broken等问题学习笔记
- iOS如何显示 UITableViewCell detailTextLabel?
- 利用forms元素提交表单
- LNMP系列——Linux基础配置
- Testlink中集成Mantis管理系统
- android应用启动显示白色背景的解决方法
- LNMP系列——常用的linux命令
- php中数据库连接mysqli和mysql的区别