文档章节

OC语言-类与对象

盘盘的灰灰
 盘盘的灰灰
发布于 2016/08/05 17:42
字数 1201
阅读 9
收藏 0
  • 类加载.

         1). 在创建对象的时候 肯定是需要访问类的.

         2). 声明1个类的指针变量也会访问类的.

         在程序运行期间 当某个类第1次被访问到的时候. 会将这个类存储到内存中的代码段区域.这个过程叫做类加载.

         只有类在第1次被访问的时候,才会做类加载.

         一旦类被加载到代码段以后. 直到程序结束的时候才会被释放.

  • [Person new]; 真正在内存中创建对象的其实是这句代码.

                  new做的事情

                  a. 在堆内存中申请1块合适大小的空间.

                  b. 在这个空间中根据类的模板创建对象.

                     类模板中定义了什么属性.就把这些属性依次的声明在对象之中.

                     对象中还有另外1个属性 叫做isa 是1个指针. 指向对象所属的类在代码段中的地址.

                  c. 初始化对象的属性

                     如果属性的类型是基本数据类型 那么就赋值为0

                     如果属性的类型是C语言的指针类型 那么就赋值为NULL

                     如果属性的类型是OC的类指针类型 那么就赋值为nil

                  d. 返回对象的地址.

  • 对象的属性的默认值.

         如果我们创建1个对象,没有为对象的属性赋值. 那么这个对象的属性是有值的.

         如果属性的类型是基本数据类型 默认值是0

         如果属性的类型是C指针类型 那么默认值是NULL

         如果属性的类型是OC指针类型  那么默认值是nil

  • 使用建议.

     虽然使用NULL的地方可以是nil 使用 nil的地方可以使用NULL 但是不建议大家去随便使用.

     C指针用NULL

         int *p1 = NULL; p1指针不指向内存中的任何1块空间.

     OC的类指针用nil

         Person *p1 = nil; p1指针不指向任何对象.

         那么这个时候 如果通过p1指针去访问p1指针指向的对象的属性 这个时候会运行报错.

         那么这个时候,如果通过p1指针去调用对象的方法 运行不会报错 但是方法不会执行 没有任何反应

  • 函数方法调用的方式也不一样.

      函数可以直接调用.

       但是 方法必须要先创建对象 通过对象来调用.

  • 属性不允许声明的时候初始化 

          OC方法必须要创建对象通过对象名来调用 

  • 当对象作为方法的参数传递的时候,是地址传递.

    所以 在方法内部通过形参去修改形参指向的对象的时候 会影响实参变量指向的对象的值.

  • 当A类作为B类的属性的时候. 在创建B类对象的时候, B类对象中的属性仅仅只是1个指针变量. 

 

  • 猜拳游戏:
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Robot.h"
#import "judge.h"

int main(int argc, const char * argv[]) {
    
    Person *p1=[Person new];
    p1->_name=@"灰灰";
    Robot *r1=[Robot new];
    r1->_name=@"小白";
    judge *j1=[judge new];
    j1->_name=@"小黑";
    char ans='y';
    while (ans=='y') {
        [p1 showFist];
        [r1 showFist];
        [j1 winWithPlayer:p1 andRobot:r1];
        NSLog(@"请问是否要继续,y/n");
        //将文件内部的位置指针重新指向一个流(数据流/文件)的开头
        rewind(stdin);
        scanf("%c",&ans);
        while(ans!='y'&&ans!='n') {
            NSLog(@"你输入有误,请重新输入,y/n");
            rewind(stdin);
            scanf("%c",&ans);
        }
        
    }

    return 0;
}

 

#import <Foundation/Foundation.h>
#import "Robot.h"   
#import "Person.h"

@interface judge : NSObject
{
    @public
    NSString *_name;
     
}
-(void)winWithPlayer:(Person *)person andRobot:(Robot *)robot;
@end


#import "judge.h"
#import "Robot.h"

@implementation judge
-(void)winWithPlayer:(Person *)person andRobot:(Robot *)robot
{
    NSLog(@"我是裁判【%@】,我宣布比赛结果",_name);
    int num1=person->_personFistType;
    int num2=robot->_robotFistType;
    if ((num1==1&&num2==3)||(num1==2&&num2==1)||(num1==3&&num2==2)) {
        NSLog(@"恭喜玩家【%@】胜利",person->_name);
        person->_score++;
    }else if(num1==num2){
        NSLog(@"平局哦");
    }else {
        NSLog(@"恭喜电脑【%@】胜利",robot->_name);
        robot->_score++;
    }
    NSLog(@"现在比分【%@】:%d分------机器人【%@】:%d分",person->_name,person->_score,robot->_name,robot->_score);
}
@end

 

#import <Foundation/Foundation.h>

@interface Robot : NSObject
{
    @public
    NSString *_name;
    int _score;
    int _robotFistType;
}
-(void)showFist;
-(NSString *)fistTypeWithNumber:(int)number;
@end


#import "Robot.h"
#import <stdlib.h>

@implementation Robot
-(void)showFist
{
    int robotChoice=arc4random_uniform(3)+1;
    _robotFistType=robotChoice;
    NSString *ChoiceName=[self fistTypeWithNumber:robotChoice];
    NSLog(@"电脑【%@】输入的是%@",_name,ChoiceName);
}
- (NSString *)fistTypeWithNumber:(int)number
{
    if(number  == 1)
    {
        return @"剪刀";
    }
    else if(number == 2)
    {
        return @"石头";
    }
    else
    {
        return @"布";
    }
    
}
@end

 

#import <Foundation/Foundation.h>
#import "FistType.h"

@interface Person : NSObject
{
    @public
    NSString *_name;
    int _score;
    int _personFistType;
}
-(void)showFist;
-(NSString *)fistTypeWithNumber:(int)number;
@end



#import "Person.h"

@implementation Person
-(void)showFist
{
    NSLog(@"亲爱的玩家【%@】,请输入你的拳头:1.剪刀 2.石头 3.布",_name);
    int userChoice=0;
    scanf("%d",&userChoice);
    while (userChoice<1||userChoice>3) {
        NSLog(@"你输入有误,请重新输入");
        rewind(stdin);
        scanf("%d",&userChoice);
    }
    _personFistType=userChoice;
    NSString *ChoiceName=[self fistTypeWithNumber:userChoice];
    NSLog(@"玩家【%@】输入的是%@",_name,ChoiceName);
}
- (NSString *)fistTypeWithNumber:(int)number
{
   
        if(number  == 1)
        {
            return @"剪刀";
        }
        else if(number == 2)
        {
            return @"石头";
        }
        else
        {
            return @"布";
        }
    
}

@end

 

© 著作权归作者所有

共有 人打赏支持
上一篇: C语言-封装
下一篇: OC语言-基础语法
盘盘的灰灰
粉丝 0
博文 31
码字总数 24142
作品 0
深圳
私信 提问
Cocoa改造前篇 - 说在前面的

更好的阅读体验请点击 原文 从面相对象说起 (Object-Oriented Programming,简记为OOP)这个概念大家都有所耳闻,目前(2017.12),在Tiobe世界语言排行榜上排前十的语言中,C语言和Assembl...

秋刀生鱼片
2017/12/07
0
0
OC语言的特性(一)-消息传递与调用函数的表现形式

我们在初学Objective-C时,都会觉得ObjC中的消息传递和其他语言的调用函数差不多,只是在OC中,方法调用用消息传递这一概念来代替。 那么到底怎样区别OC中的消息传递与其他语言的调用函数呢。...

浩浩老师
2015/09/08
1K
0
OC之类和对象

从今天开始我的IOS开发算是起步了,第一天学习Objective-C,感觉不是很爽。作为一名Java程序猿的我,第一次使用OC语法什么的都不习惯,尤其是@到处都是,不过,今天看看还是有点儿收获的。 ...

斯特凡
2015/06/12
0
0
iOS狂暴之路(开始篇)---学习路线总结

一、学习路线规划 现如今移动端的两大平台Android和iOS是风光无限,但是又有谁能够保证这两个平台能够昌盛一辈子呢?谁也不敢保证其中一个在未来几年之后就会成为第二个诺基亚,所以我们现在...

jiangwei0910410003
2016/09/06
0
0
iOS 编写高质量Objective-C代码(二)

《编写高质量OC代码》已经顺利完成一二三四篇! 附上链接: iOS 编写高质量Objective-C代码(一) iOS 编写高质量Objective-C代码(二) iOS 编写高质量Objective-C代码(三) iOS 编写高质量...

MrLiuQ
08/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

一个本科学生对Linux的认知

一个本科学生对Linux的认知 我是一名大三的普通一本大学的软件工程的一名学生,学校开设了一些关于系统开发的课程,纸上得来终觉浅,学校的课程课时较短,想要在56个课时之内学会一些公司需要...

linuxCool
23分钟前
0
0
CentOS 安装Tomcat

Tomcat 介绍 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。 Java 程序写的网站用tomcat+jdk来运...

野雪球
37分钟前
0
0
OSChina 周四乱弹 —— 每天都迟到是种什么样的体验

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @开源中国首席机器人 :《Too Good At Goodbyes (Acoustic) - Sam Smith - 单曲》 《Too Good At Goodbyes (Acoustic) - Sam Smith - 单曲》 ...

小小编辑
42分钟前
213
9
jquery通过id显示隐藏

var $div3 = $('#div3'); 显示 $div3.show(); 隐藏 $div3.hide();

yan_liu
今天
3
0
《乱世佳人》读书笔记及相关感悟3900字

《乱世佳人》读书笔记及相关感悟3900字: 之前一直听「荔枝」,后来不知怎的转向了「喜马拉雅」,一听就是三年。上班的时候听房产,买房了以后听装修,兴之所至时听旅行,分手后听亲密关系,...

原创小博客
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部