IOS 开发学习总结objectivec面向对象之——方法 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

    objective-c 的方法不能独立存在,所有的方法都必须定义在类里,

IOS 开发学习总结objectivec面向对象之——方法

。方法在逻辑上,要么属于类,要么属于对象。

方法的所属性

    不难发现,方法在语法上和功能上,方法与函数很相似。其实,方法是由传统的函数发展而来的。

    objective-c 调用函数时的传参机制和调用方法时的传参机制是一样的,都是值传递,都是传入参数的副本。

方法与传统的函数的显著不同:

    在结构化编程语言里,函数是一等公民。整个程序是由一个一个函数组成;

    面向对象的语言里,类是一等公民。因此在 OC 里方法不能独立存在,必须属于类或者对象。

    由于 objective-c 里的方法不能独立存在,也不能像函数那样独立执行,执行方法时必须使用类或者对象作为调用者。

    由上,objective-c 中方法的所属性主要体现在下面的3个方面:

    1. 方法不能独立定义,只能在类体里定义。

    2. 方法在逻辑上,要么属于类,要么属于对象。

    3. objective-c 里的方法不能独立存在,也不能像函数那样独立执行,执行方法时必须使用类或者对象作为调用者。

形参个数可变的方法

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

    为了在程序中获取个数可变的形参。需使用如下关键字:

    - va_list:这是个用于定义指向可变参数列表的指针变量。

    - va_start:这是个函数。指定开始处理可变形参的列表,并让指针变量指向可变形参列表的第一个参数。

    - va_end:结束处理可变形参,释放指针变量。

    - va_arg:该函数返回指针当前指向的参数的值,并将指针移动到指向下一个参数。

    如下示例程序:

    头文件:VarArgs.h

<code class="hljs" r="">#import<foundation foundation.h="">@interface VarArgs : NSObject// 定义形参个数可变的方法- (void)test:(NSString *) name, ...;@end</foundation></code>

    实现文件:VarArgs.m

<code class="hljs" bjectivec="">#import VarArgs.h@implementation VarArgs- (void)test:(NSString *) name, ...{    // 使用va_list定义一个argList指针变量,该指针变量指向可变参数列表    va_list argList;    // 如果为第一个name参数存在,才需要处理后面的参数    if (name)    {        // 由于name参数并不在可变参数列表中,因此先处理name参数        NSLog(@%@ , name);         // 让argList指向第一个可变参数列表的第一个参数,开始提取可变参数列表的参数        va_start(argList, name);         // va_arg用于提取argList指针当前指向的参数,并将指针移动到指向下一个参数        // arg变量用于保存当前获取的参数,如果该参数不为nil,进入循环体        NSString* arg = va_arg(argList, id);        while (arg)        {            // 打印出每一个参数.            NSLog(@%@,arg);            // 再次提取下一个参数,并将指针移动到指向下一个参数            arg = va_arg(argList, id);        }        // 释放argList指针,结束提取        va_end(argList);    }}@endint main(int argc , char * argv[]){    @autoreleasepool{        VarArgs* va = [[VarArgs alloc] init];        [va test:@疯狂iOS讲义             , @疯狂Android讲义, @疯狂Ajax讲义 , nil];    }}</code>

    本质上说,这个可变参数也是个类似数组的结构,

电脑资料

IOS 开发学习总结objectivec面向对象之——方法》(https://www.unjs.com)。最后要指出的是,个数可变的形参只能处于形参列表的最后。即:一个方法中最多只能有一个长度可变的形参。

最新文章