文档章节

OC语言-类与对象

盘盘的灰灰
 盘盘的灰灰
发布于 2016/08/05 17:42
字数 1201
阅读 8
收藏 0
点赞 0
评论 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

 

© 著作权归作者所有

共有 人打赏支持
盘盘的灰灰
粉丝 0
博文 31
码字总数 24142
作品 0
深圳
OC语言的特性(一)-消息传递与调用函数的表现形式

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

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

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

斯特凡
2015/06/12
0
0
Native code support (Native Code(C和C++)支持)

1. WP 8和Win 8之间共享native代码 通过 Windows 运行时组件,可以在 Windows 应用商店和 Windows Phone 应用程序之间共享Native coad。由于windows phone 8和Windows 8没有共享所有的Windo...

失足处男的倒霉孩子
2013/12/26
779
0
iOS狂暴之路(开始篇)---学习路线总结

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

jiangwei0910410003
2016/09/06
0
0
Swift4.0基础知识回顾

简单介绍一下Swift Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X 和 iOS 应用程序,Swift语言让应用开发更简单、更快、更稳定,确保最终应用有着更好的质量更多了解Swift可以去《The...

博行天下
2017/12/06
0
0
OC学习篇之---对象的拷贝

在前一篇文章中我们说到了如何解决对象的循环引用问题:http://blog.csdn.net/jiangwei0910410003/article/details/41926369,这一篇文章我们就来介绍一下OC中的对象拷贝概念,这个对于面向对...

jiangwei0910410003
2014/12/14
0
0
iOS中@selector的runtime过程

大家都知道oc是动态语言,是runtime的,怎么体现他的动态性呢,今天用SEL来分析下,之前分享过钩子其实就可以看出来了,现在具体看看OC是怎么通过SEL找到函数的。 [self performSelector:@s...

余成海
2015/05/06
0
0
OC1-OC面向对象新概念解释及其面向对象编程

一.C语言主要是面向过程,OC中开始大量使用面向对象。对于在以后的问题中有了面向对象和面向过程两种思考模式。就五子棋而言,面向过程是具体操作步骤,设计思路就是首先分析问题的步骤:1、...

小黑202
2016/07/15
0
0
Object-C基础-01-概述

回到顶部 前言 目前来说,Objective-C(简称OC)是iOS开发的核心语言,在开发过程中也会配合着使用C语言、C++,OC主要负责UI界面,C语言、C++可用于图形处理。近来,流传Ruby、C#也可以开发iOS...

Corwien
2016/03/16
33
0
深入Objective-C的动态特性

Objective-C具有相当多的动态特性,基本的,也是经常被提到和用到的有动态类型(Dynamic typing),动态绑定(Dynamic binding)和动态加载(Dynamic loading)。 这些动态特性都是在Cocoa程...

Im刘亚芳
2014/11/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

MyBatis源码解读之延迟加载

1. 目的 本文主要解读MyBatis 延迟加载实现原理 2. 延迟加载如何使用 Setting 参数配置 设置参数 描述 有效值 默认值 lazyLoadingEnabled 延迟加载的全局开关。当开启时,所有关联对象都会延...

无忌
8分钟前
0
0
javascript 类变量的实现

代码如下: function echo(){ for(let i=0;i<arguments.length;i++) console.log(arguments[i]);}function extend(o, p){for (prop in p) {o[prop] = p[prop]}retur......

backbye
12分钟前
0
2
编程语言对比分析:Python与Java和JavaScript(图)

编程语言对比分析:Python与Java和JavaScript(图): 凭什么说“Python 太慢,Java 太笨拙,我讨厌 JavaScript”?[图] 编程语言生而为何? 我们人类从原始社会就是用语言表达自己,互相沟通...

原创小博客
20分钟前
0
0
Akka构建Reactive应用《one》

看到这Akka的官网,描述使用java或者scala构建响应式,并发和分布式应用更加简单,听着很高级的样子,下面的小字写着消息驱动,但是在quickstart里面又写容错事件驱动,就是这么钻牛角尖。 ...

woshixin
32分钟前
0
0
ffmpeg源码分析 (四)

io_open 承接上一篇,对于avformat_open_input的分析还差其中非常重要的一步,就是io_open,该函数用于打开FFmpeg的输入输出文件。 在init_input中有这么一句 if ((ret = s->io_open(s, &s-...

街角的小丑
33分钟前
0
0
String,StringBuffer ,StringBuilder的区别

不同点 一、基类不同 StringBuffer、StringBuilder 都继承自AbStractStringBuilder,String 直接继承自 Object 2、底层容器“不同” 虽然底层都是字符数组,但是String的是final修饰的不可变...

不开心的时候不要学习
49分钟前
0
0
nodejs 文件操作

写文件code // 加载文件模块var fs = require("fs");var content = 'Hello World, 你好世界!';//params 文件名,内容,编码,回调fs.writeFile('./hello.txt',content,'utf8',function (er......

yanhl
51分钟前
0
0
SpringBoot mybits 查询为0条数据 但是在Navicat 中可以查询到数据

1.页面请求: 数据库查询: 2018-07-16 17:56:25.054 DEBUG 17312 --- [nio-9010-exec-3] c.s.h.m.C.selectSelective : ==> Preparing: select id, card_number, customer_id, customer_nam......

kuchawyz
今天
0
0
译:Self-Modifying cod 和cacheflush

date: 2014-11-26 09:53 翻译自: http://community.arm.com/groups/processors/blog/2010/02/17/caches-and-self-modifying-code Cache处在CPU核心与内存存储器之间,它给我们的感觉是,它具......

我叫半桶水
今天
0
0
Artificial Intelligence Yourself

TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理。Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow为张量从流...

孟飞阳
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部