IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> [OC]-类和对象和方法详解 -> 正文阅读

[移动开发][OC]-类和对象和方法详解

OC-类和对象

定义类

面向对象程序设计中有两个重要概念,类(class)和对象(object),对象也称为实例。
类和对象是面向对象的核心

定义类的步骤:

在这里插入图片描述

接口部分就是对成员变量进行定义,而实现部分就是对整个接口部分进行一个想细化的说明,下面我们会提到

类型 :可以是oc允许的任何类型,包括基本类型,构造类型和各种指针类型类型;

成员变量名 :OC语言建议成员变量名以下环线开头 int _data

语法声明格式

在这里插入图片描述

关于 方法类型标识
+ :代表是类方法,直接使用类名即可调用
—:代表实例方法 必须用对象才能调用
eg :// 下面定义了一个 写名字和年龄的方法,void是无返回值的 ,
- (void) setName: (NSString*) name andAge :(int) age;
 setName 是一个传入参数为NSString的方法,参数的名字是name,
 andAge 同理 传入的int 类型赋值 age

注意 setName 与 setName :是两种不同的方法
前者不带冒号说明是一个不带形参的方法
后者这是一个带有形参的方法

类的实现

在这里插入图片描述

实现部分语法

关于实现部分的语法说明

  • 类实现部分的类名必须与类接口部分的类名相同, 用于表示这是同一个类的接口部分和实现部分
  • 类实现不部分也可以声明自己的变量,但是这和语言的函数一样 只能在当前类内访问西安挡雨 定义属于自己的隐藏成员变量

代码展示

对象的产生与使用

  • 定义变量
  • 创建对象
  • 实现类方法
// 接口部分
//1.定义一个疯狂person的类
@interface FKperson : NSObject {
    定义了2个成员变量
    int _age;
    NSString* _name;
@public;
}

// 2.方法声明
//“- ”是实例方法 必须由实例来调用

// 下面定义了一个 写名字和年龄的方法,void是无返回值的 ,
- (void) setName: (NSString*) name andAge :(int) age;

// 下面定义了一个say方法 ,参数传入的是NSString* 型的
- (void) say: (NSString*) content;

// 不带形参的方法  注意 返回值是(NSString* 型)
- (NSString*) info;

//“+”是类方法,只能使用类来调用
+ (void) foo;
@end



//3.方法实现

@implementation FKperson {
    ;
}

// 这个test没有在接口中声明,所以只能在实现部分使用-(被隐藏的方法)
- (void) test {
    NSLog(@"--只在实现部分定义的tset方法\n");
}

// name 被 n代替 age 被 a代替,之后有解释说明
- (void) setName: (NSString *)n andAge: (int)a {
    _name = n;
    _age = a;
}

// 定义了一个say方法
- (void) say:(NSString *) content {
    NSLog(@"%@", content);
}

// 定义了一个不带形参但是有返回值的方法
- (NSString*) info {
    [self test];//
    return [NSString stringWithFormat:
            @"我是一个NBA球员名字为: %@, 年龄为%d。", _name, _age];
}

//定义了一个只能被类调用的类方法
+ (void) foo {
    NSLog(@"FKperson 类的泪方法, 只通过类名进行调用");
}
@end

//对象的产生和使用
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        FKperson * person = [[FKperson alloc] init];
        [person say:@"Hello, I love iOS "];
        [person setName:@"獭兔" andAge:27];
        NSString* info = [person info];
        NSLog(@"person -info 的信息为:%@", info);
        [FKperson foo];
        
    }
    return 0;
}

在这里插入图片描述

** 值得注意的是 在实例方法info中 出现了[self ] 这个新名词**

在上面程序中,通过 FKPerson 实例调用了 say:万法,调用方法吋必须为方法的形参赋值。
因此,在这行代码中调用 FKPerson 对象的 say:方法时,必须为 say:方法传入一个字符串作为
形参的参数值,这个字符串将被赋给 content 参数
除此之外,上面程序还调用了 FKPerson 对象的 setName:andAge::万法和 info 方法:对于
test 方法,由于程序只是在 FKPerson 类的实现部分定义了该万法,故该 test 方法仅能在
FKPerson 类的内部使用,因此程序通过 FKPerson 对象不能调用 test 方法。
H面程序通过 FKPerson 类调用了foo 万法,这是因为定叉foo 方法时使用了+标识符,表
明该方法是一个类方法,因此只能通过 FKPerson 类调用

self关键字

定义

  • **Objective-C 提供了一个self 关键字,self 关键字总是指向该方法的调用者(对象或类),当 self 出现在实例方法中时,self 代表调用该方法的对象:当self 出现在类方法中时,self 代表调用该方法的类。
    self 关键字最大的作用是让类中的一个方法访问该类的另一个方法或成员变量。先看下面这个例子,假设定义了一个FKDog 类,这个FKDog对象的run 方法需要调用它的jump 方法,

    self 总是代表当前方法的调用者,当这个方法被调用时,它所代表的对象才被确定下来:
    谁在调用该方法,self 就代表谁。**

// self关键字
// 接口部分
@interface fkdog : NSObject {
    ;
}
- (void) jump;
- (void) run;
@end

// 实现部分
@implementation fkdog

-(void) jump {
    NSLog(@"正在执行jump方法");
}

-(void) run {
    [self jump];
    NSLog(@"正在执行run方法");
}
@end

** 如果self出现在实例方法中,self就代表调用该方法的对象
当self出现在类方法中,self就代表调用该方法类本身
**

self案例

  • 当self作为作为对象的默认引用使用时,程序可以像访问普通变量一样访问self这个引用,也可以吧self当作普通方法的返回值
@interface returnSelf : NSObject {
    @public
    int _age;
}
- (returnSelf*) grow;

@end

@implementation returnSelf
- (returnSelf *) grow {
    _age ++;
    return self;
}
@end
int main(int argc, const char * argv[]) {
    @autoreleasepool {
//        FKperson * person = [[FKperson alloc] init];
//        [person say:@"Hello, I love iOS "];
//        [person setName:@"獭兔" andAge:27];
//        NSString* info = [person info];
//        NSLog(@"person -info 的信息为:%@", info);
//        [FKperson foo];
        returnSelf *rt = [[returnSelf alloc] init];
        //连续调用同一个方法
        [[[rt grow] grow] grow];
        NSLog(@"rt 的_age 成员变量值是: %d", rt->_age);   
    }
    return 0;
}

id 类型

定义

  • Objective-C 提供了一个id类型,这个id 类型可以代表所有对象的类型。也就是说,任意类的对象都可赋值给 id 类型的变量。
    当通过 id 类型的变量来调用方法时,Objective-C 将会执行动态鄉定。所谓动态鄉定,是指 Obiective-C 将会跟踪对象所属的关,它会在运行时判断该对象所属的类,并在运行时确定
int main(int argc, const char * argv[]) {
    @autoreleasepool {
//        FKperson * person = [[FKperson alloc] init];
//        [person say:@"Hello, I love iOS "];
//        [person setName:@"獭兔" andAge:27];
//        NSString* info = [person info];
//        NSLog(@"person -info 的信息为:%@", info);
//        [FKperson foo];
//        returnSelf *rt = [[returnSelf alloc] init];
//        [[[rt grow] grow] grow];
//        NSLog(@"rt 的_age 成员变量值是: %d", rt->_age);
        
//
        id p = [[FKperson alloc] init];
        [p say:@"你好,欢迎学习iOS!"];
    }
    return 0;
}

在这里插入图片描述

OC-方法详解

定义与属性

  • 方法是类或对象的行为特征的抽象,也是类或对象最重组成部分。
    从功能上看方法完全类似于传统结构化程序设计里的函数。值得指出的是,0bjective-C的方法不能独立存在,
    所有的方法都业须定义在类里,方法在逻辑上要么属于类,要么属于对象。

属性

  • 方法与传统函数具有显著不同:在结构化编程语音里,函数是
    一等公民。整个软件由个个的函数组成:在面向对象的编程语言里,类才是一等公民。因此,在Objective-C 语言里方法不能独立存在,方法必须属于类或对象。

  • 如果需要定义方法,则只能在类体内定义,不能独立定义一个方法(定义的只能是函数)。

  • 一旦将一个方法定义在某个类的类体内,如果这个方法使用了+标识符,则这个方法就属于这个类:如果使用了 “- ” 标识符,则这个方法就属千这个类的实例,因为 0bjective-C里的方法不能独立存在,它必須属于一个类或者个对象,因此方法也不能向函数独立执行,执行方法时必须使用类或者对象来最为调用者,方法必须使用如下模板

     1.类 方法] 或者2.[对象 方法]
    

形参个数可变的方法

  • 在定义方法时 在最后一个形参名后面加逗号和三个点(,…)则表明该形参可以接受多个参数值

     下面定义了一个参数可变的方法
    

在这里插入图片描述

图中的函数

在这里插入图片描述

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-05-21 19:06:35  更:2022-05-21 19:07:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 1:32:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码