A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© pumpkin 中级黑马   /  2015-12-7 21:50  /  822 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.------<a  target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
黑马程序员—OC第二天学习总结

好吧,如标题所示,这是我对OC第二个文件夹个人认为比较重点或者是比较容易忘记的知识点进行整理,以便自己的日后复习。也希望对初学者有所帮助~

【Person new】
思考几个问题:
1申请的空间在内存的哪个区?
New申请的空间在内存的堆区(动态分配的内存空间)
实例变量是基本数据类型,此时为0
如果是字符串类型,此时为null

2实例变量又保存在什么地方?
堆区
P存放在栈区

3对象方法保存在什么地方?
代码区

4为什么使用【p run】;就可以调用方法了?如何调用的?
先根据P指针找到堆区的空间,堆区空间找isa指针,再找代码区里面的run方法。

5一个类可以创建多个对象
Person *p1=【person new】;

第4个问题 理解下图:

第5个问题:理解下图
(isa都是一样指向0*100)

关于#pragma mark指令的使用的作用,帮代码分组,方便查找

了解函数和对象方法的区别:
1对象方法的实现只能写在@implementation@end中,对象方法的声明只能写在@interface@end中间
2对象方法只能由对象来调用,类方法只能由类来调用,不能当函数一样调用
3对象方法以-开头,类方法以+开头
4函数属于整个文件,可以写在程序中的任何位置,但写在@interface里面会无法识别
5对象方法归类或者对象所有

对象和方法之间的关系:
1对象作为方法的参数
-(void)dispPerson:(person*)person;
Person *p1=[person new];
[p dispPerson:p1]//对象作为方法的实参


2对象作为方法的返回值
-(person*)changeSex:(PERSon*)person{
Peson->_sex=kSExWomen;
return person;}


理解例题:

Typedef enum{kcolorW,kcolorY,KcolorH}color;
Typedef enum{Ksexg,ksexm,ksexy}sex;
@interface Dog:NSObject{
@public
Color  _color;
Float _weight;
Sex _sex;
Int _speed;
}
-(void)eat:(nsstring*)foodname;
-(void)run;
-(void)bark;
-(Bool)isCompareColorWithother:(Dog*)dog;
-(int)comparespeedwithother:(Dog*)dog;
@end

@Implementation Dog
-(void)eat:(nsstring*)foodname{
     _weight+=0.5f;
     NSLog(@’狗正在吃%@,吃完后还打了个嗝’,_foodname);
}
-(void)run{
     _weight-=0.5f;
     NSLog(@’狗正在以%@速度跑’,_speed);
}
-(void)bark{
NSLog(@’性别:%d’,_sex);
}
-(Bool)isCompareColorWithother:(Dog*)dog{
     If(_color==dog->_color){return yes);}  else {return no;}
}
-(int)comparespeedwithother:(Dog*)dog{
     Ruturn _speed-dog->_speed;
}
@end

主程序:
主程序英文开头{@   
   {
Dog *d1=[dog new];(创建第一条狗)
d1->_speed=70;
d1->_weight=20;
d1->_sex=ksexyao;
d1->_color=kcolorh;
[d1 bark];
[d1 eat:@’骨头’];
[d1 bark];

Dog *D2=[dog new];(创建第二条狗)
D2->_speed=60;
D2->_weight=30;
D2->_sex=ksexyao;
D2>_color=kcolorY;
[d2 bark];

BOOL isSamecolor=[d1 iscomparecolorwithother:d2];
NSLog(@’issamecolor=%d\n’,issamecolor);{1相同0不同}
}
Return 0;
}


理解例题:
Typedef enum{kcolorW,kcolorY,KcolorH}color;
Typedef enum{Ksexg,ksexm,ksexy}sex;
#pragma mark-
@interface Dog:NSObject{
@public
Color  _color;
Float _weight;
Sex _sex;
Int _speed;
}
-(void)eat:(nsstring*)foodname;
-(void)run;
-(void)bark;
-(Bool)isCompareColorWithother:(Dog*)dog;
-(int)comparespeedwithother:(Dog*)dog;
@end

#pragma mark-
@interface person:NSObject{
@public
Nsstring * _name;
Dog* _dog;
}
-(void)feeddog:(NSString*)foodName;
-(void)liuDog;
@end

@implementation person{
(void)feeddog:(NSString*)foodName{
   [_dog eat:foodName];
}
-(void)liuDog{
   [_dog run];
}
}
@end
#pragma mark-

@Implementation Dog
-(void)eat:(nsstring*)foodname{
     _weight+=0.5f;
     NSLog(@’狗正在吃%@,吃完后还打了个嗝’,_foodname);
}
-(void)run{
     _weight-=0.5f;
     NSLog(@’狗正在以%@速度跑’,_speed);
}
-(void)bark{
NSLog(@’性别:%d’,_sex);
}
-(Bool)isCompareColorWithother:(Dog*)dog{
     If(_color==dog->_color){return yes);}  else {return no;}
}
-(int)comparespeedwithother:(Dog*)dog{
     Ruturn _speed-dog->_speed;
}
@end

主程序:
主程序英文开头{@   
   {
Dog *d1=[dog new];(创建第一条狗)
d1->_speed=70;
d1->_weight=20;
d1->_sex=ksexyao;
d1->_color=kcolorh;
[d1 bark];
Person *p=[person new] ;
//给p一条狗
P->_dog=d1;
NSLog(@”@“,p->_dog);
[p feedDdog:@’骨头’];//狗会吃东西吗?为什么?
}
Return 0;
}




对象作为参数的连续传递(士兵需要枪,枪需要弹夹,所以以弹夹作为参数进行连续传递)

#pragma mark 子弹声明
@inteface bullet:NSObject{
@pubulic
NSString *_size;
Int _bulletcount;
@end

#pragma mark 子弹实现
@implementation bullet
@end

#pragma mark 枪类声明
@interface gun:NSObject{
@public
NSString *_size;

}
-(void)shoot;
-(void)shoot:(bullet*)bullet;
}
@end

#pragma mark 枪类实现
@implementation gun
-(void)shoot{
NSLog(@“@正在射击”,_size);
}
-(void)shoot:(bullet*)bullet{
//子弹对象(弹夹)中的子弹个数
If (bullet->_bulletcoutnt>0){
bullet->_bulletcount--;
NSLog(@”%@啪啪啪,剩余子弹:%d”,bullet->bulletcount); }
    else{NSlog(@”没子弹了”);}
}
@end

#pragma mark 士兵声明
@interface  soldier:NSObject
{
@public
NSString  *_name;
Int  life;
Int  level;
}
-(void)firebygun:(gun*)gun;
@end

#pragma mark 士兵实现
@implementation soldier
{
-(void)firebygun:(gun*)gun andbullet:(bullet*)bullet
  {[gun shoot:bullet];//子弹作为参数传递给射击的方法}
}
@end

主程序:
Soldier *s=[soldier new];
S->_name=@”三年”;
S->life=98;
S->level=2;
Gun *gun=[gun new];
gun->_size=@”小米加步枪“;

Bullet *mybullet=【bullet new】;
Mybullet->_size=@”4mm”;
Mybullet->_bulletcout=3;

[s firebygun:gun andbullet:mybullet];
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马