OC——类

1.Objective-C是C语言的超集,完全兼容C语言

2.所有的关键字都以“@”开头,例如:@interface,@class,@implementation

3.Objective-C的所有对象必须继承于NSObject,并且不存在多继承

4.Objective-C支持协议,支持多态

5.Id类型 类似泛型对象,void* 类似任意的指针类型

“-”表示对象方法

“+”表示类的方法

一:类的定义

◆ .h文件:存放类和声明方法

声明使用 @interface 开头 @end 结尾

#import <Foundation/Foundation.h> //必须导入Foundation,Foundation框架是支持OC所有数据结构的框架

@interface Person : NSObject //@interface 类名:继承的类(含义:Person类 继承于NSObject类)

{
//在”{}“之间存放成员变量字段
@public //public表示公有,自己和外部成员都可以访问
    int age;
@private //private表示私有,只有自己内部可以访问
    float height;
@protected
    NSString *name; //protected表示保护,只有自己以及子类可以访问
//“*”可以理解为是oc的一个标识符,凡是继承于NSObject的对象都必须加上“*“来修饰
}
//”{}“和”@end“之间存放方法,类的方法以及对象的方法

//所有方法名以init开头的方法,一般都为构造方法。构造方法即是初始化对象。
- (id) init;
- (id) initWithAge: (int)newAge;
- (id) initWithAge: (int)newAge AndHeight: (float)newHeight;//id表示任何一个继承于NSObject的对象,也可以用(Person *)来构造方法,但是使用(id)更为简便

//set方法
- (void) setAge: (int)newAge;
- (void) setHeight: (float)newHeight;
- (void) setAge:(int)newAge AndHeight: (float)newHeight;

//get方法
- (int) getAge;
- (float) getHeight;
- (NSString *) getName;

@end

◆ .m文件:存放类的实现

实现以@implementation 开头 @end 结尾

@implementation Person
//在两个“@”直接去实现方法,如构造方法(init),get方法,set方法
{
//可以在这里写成员变量,但是默认为private,只有在Person.m的文件中实现的方法才能调用。
}
//在“{}”和“@end”之间所写的实现方法,同样也是默认为private,只能在Person.m的文件中调用。

//这是OC中特有的构造方式的写法,所有的格式都是如此。
- (id) init{
    if (self = [super init]) {
// super 表示父类,super init 表示父类调用了自己的init方法。
// init方法 -> 第一步:分配内存  第二步:内存空间指向self
//self 表示对象本身
        age = 20;
        height = 180.0;
        name = @"jerry";
    }
    return self;
}

// set方法
- (void) setAge:(int)newAge {
    age = newAge;
}

// get方法
- (int) getAge{
    return age;
}
@end

  

二:类的调用以及实例化

#import <Foundation/Foundation.h>#import "Person.h"//用import导入Person.h文件

int main(int argc, const char * argv[]) {
    @autoreleasepool {

        Person *p = [[Person alloc] init];
        //alloc表示分配内存, init表示构造方法。
        //在调用init构造方法后,可以得到一个self指针,并返回而 p,即p得到了对象

        NSLog(@"name is-%@",p->name);
        //这种调用存在安全隐患,并且只有当name为public的时候才能调用

        NSLog(@"name is-%@",[p getName]);
        //调用get方法得到值

        [p setAge:100];
        //调用set方法,重设age的值

    }
    return 0;
}

三.类的设计  

例子:人用电脑玩游戏。

1:需要两个类,人和电脑。

2:人:玩游戏

3:电脑:开机 加载游戏 关机

整个过程就是:人调用电脑去实现开机 加载游戏 关机。人站在管理者的角度,去指挥电脑。

类一:人

Person.h

定义调用电脑玩游戏的这个方法

#import <Foundation/Foundation.h>
#import "Computer.h"//导入电脑的.h文件

@interface Person : NSObject
- (void) playGameWith: (Computer *)computer;//调用电脑这个类// - (void)方法名:(调用的类*)对象名称;
@end

Person.m

实现调用电脑玩游戏的这个方法

#import "Person.h"

@implementation Person

- (void) playGameWith:(Computer *)computer
{
    [computer start];
    [computer LoadGame];
    [computer shutdown];
}

@end

类二:电脑 

Computer.h

定义开机 加载游戏 关机 这三个方法

#import <Foundation/Foundation.h>

@interface Computer : NSObject
- (void) start;
- (void) shutdown;
- (void) LoadGame;

@end

Computer.m

实现开机 加载游戏 关机 这三个方法

#import "Computer.h"

@implementation Computer

- (void) start
{
    NSLog(@"computer startup ");
}

- (void) LoadGame
{
    NSLog(@"Load over");
}

- (void) shutdown
{
    NSLog(@"computer off");
}

@end

运行main.m

#import <Foundation/Foundation.h>
#import "Person.h"  //导入人的.h文件
#import "Computer.h"  //导入电脑的.h文件

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Person *A = [[Person alloc]init];
        Computer *computer = [[Computer alloc]init];
        [A playGameWith:computer];

    }
    return 0;
}

  

  

 

时间: 2024-07-30 08:31:12

OC——类的相关文章

《黑吗程序员》OC的认识和第一个OC类

面向对象和面向过程的区别 ① oc是面向对象 ② c是面向过程 ③  面向对象和面向过成只不过是解决问题的两种不同的思路 ④  面向过程只不过是考虑问题解决的步骤,面向对象只不过是考虑解决问题需要的对象. OC 类的认识      类的设计必须关心三样事物: ① 类名 ② 属性 ③ 行为 类名:所有的名词都是类名,且类名的第一个字母必须大写. 如果类名有多个名词,要使用驼峰标示. 属性:代表这个类在创建出来所拥有的的属性. 行为: 这个类所拥有的功能. 类的创建 // 类的声明 @interfa

OC类的继承以及类的循环调用

一, 关于OC的实例变量的可见度,即实例变量的访问权限有三种: 1),@public           公有的 被@public修饰的实例变量是公共的,即没有访问权限,在任何文件中都可以访问,(访问方式是通过对象+指向操作符) 2),@protected    受保护的 被@protected修饰的实例变量有一定的访问限,只允许在本类文件及子类文件中访问,其他文件不可访问 3),@private         私有的 被@private 修饰的实例变量,只允在在本类文件中访问,不可以在子类文

OC类的声明和实现,书写容易犯的错误

oc类的声明和实现,书写时候,容易犯的错误主要包括以下几点: 1.只写声明,不写实现 2.将@end这个结束标记忘记了 3.类的声明或者实现都不能写在c的函数中 4.属性的声明必须写在大括号当中 5.在声明属性的时候,不能直接赋值 6.声明与实现不能嵌套 7.方法的声明,只能写在大括号的下面,@end上面 8. '-[Person run]: unrecognized selector sent to instance 0x100109c80'  经典错误(记住),就是对象没有找到run这个方法

OC面向对象之第一个OC类

在学过java.c++这样语言之后,再来学习OC语言,虽然也同样是面向对象的语言,但是OC语言仍然给我们一种很"怪异"的感觉.这主要是由于OC语言本身有着它独特的命名和使用方法.总结java语法和OC语法的使用,我们会发现其实还是有很多规律可循的.下面就总结了OC类的一些特性. 一.关于OC类 1.oc中一般用两个文件描述一个类,与java是不同的. 2.后缀.h文件是类的声明文件,用于声明成员变量.方法.使用关键字@interface和@end; 而且.h文件只作声明,并没有对类的方

第一个OC类、解析第一个OC程序

01第一个OC 类 本文目录 • 一.语法简介 • 二.用Xcode创建第一个OC的类 • 三.第一个类的代码解析 • 四.添加成员变量 • 五.添加方法 • 六.跟Java的比较 • 七.创建对象 • 八.访问公共成员变量和方法说明:这个Objective-C专题,是学习iOS开发的前奏,也为了让有面向对象语言开发经验的程序员,能够快速上手Objective-C.如果你还没有编程经验,或者对Objective-C.iOS开发不感兴趣,请忽略.学习本专题之前,建议先学习C语言专题.OC是一门面向

OC类与对象实例化,类之间的方法调用小题目

两个OC类与对象实例化题目 要求: * 类名.属性名.属性类型.方法名.方法参数.方法返回值自拟 * 自己写main函数测试设计是否合理 /* 1.设计一个"狗"类 1> 属性 * 颜色 * 速度(单位是m/s) * 性别 * 体重(单位是kg) 2> 行为 * 吃:每吃一次,体重增加0.5kg,输出吃完后的体重 * 吠(叫):输出所有的属性 * 跑:每跑一次,体重减少0.5kg,输出速度和跑完后的体重 * 比较颜色:跟别的狗比较颜色,如果一样,返回YES,不一样,返回NO

oc类的功能的拓展与延展

类的扩展 一   类目 (类目也称为分类,为没有源码的类添加方法.) 1.作用 1)可以扩展别人的类,可以作为子类的替代方法. 2)把同一类的代码放到多个文件中. 2.形式 1)文件名:目标类+类目名.h 目标类+类目名.m 2).h文件中 @interface 需要扩展的类的类名(分类名) -( )method: @end eg: 为字符串添加一个类 NSString+SayHi.h @interface NSString (SayHi) -(void)sayHi;//为字符串添加方法 @en

OC类的设计

//Objective-C面向对象的C语言. //OC完全兼容C,凡是C语言代码可以直接编译在OC的工程当中. [面向过程的语言]都是祈使句,直接和CPU沟通.目的是操作CPU,储存数据,管理数据. //数学逻辑,就像小学解应用题,关注的是数据和管理数据. [面向对象的语言]在程序中,添加能够接收消息的单元(对象),每个单元拥有自己的功能,各单元合作,完成程序. //应用程序都是用(面向对象的语言编程)(OOP)的 //面向对象没有具体的官方定义.早期只使用[继承][封装][多态]编写程序的思想

[Objective-C]简单实现一个OC类

一.语法规范 1.类:抽象的描述一件事物,比如将人.狗和猫抽象成动物类 在OC中用两个文件来描述一个类 1> .h:类的声明文件,用于声明成员变量和方法,类的声明代码在关键字@interface和@end之间: 2> .m:类的实现文件,用于实现.h文件中的方法,类的声明代码在关键字@implementation和@end之间: 注意:.h文件中的方法只参加声明,不参加实现:也就是说,只说明方法类型.方法返回值类型.方法名.方法参数类型,不编写方法内部代码 2.方法: 1> 方法的分类

【IOS学习基础】OC类的相关

几天前突然在别人的类的.m文件中看到这么一句代码:@synthesize xxxx = _xxxx; 当时愣是没理解啥意思,过后才缓过神来发现原来是把一些类的基础知识忘记了,虽然不用过多去深究以前的一些旧东西,但但是既然遇到了,还是复习一下. 一.类与对象 1.类:类是定义同一类所有属性和方法的蓝图或原型. 2.对象:用来描述客观事物的一个实体,由具体的属性和方法构成. 3.类与对象的关系:类是用来制作无数实体(对象)的工程图纸. 4.类的特征:属性 5.类的行为:方法 二.封装 1.类就是封装