iOS方法和实例变量

1.类的方法

类的方法和C语言的函数不同,其在逻辑上要么属于类,要么属于对象。即所有的方法必须使用[类 方法](“+”号方法)或者[对象 方法](‘-’号方法)的形式来调用。

如果在定义方法时,最后一个参数名后面增加逗号和三点(,...),即表明该方法可以接受多个参数值。
#import <Foundation/Foundation.h>

@interface Person : NSObject<NSCopying>
{
    NSString * _name ;
    int _age ;
}

@property (nonatomic,retain)NSString * name;
@property (nonatomic,assign)int age ;

-(void)test:(NSString * ) name ,...; //定义行参个数可变的方法
//-(void)printInfo;
//+(void)personInfo ;
@end

为了在程序中获取可变的行参,需要使用以下关键字。
va_list:这是一个类型,用于定义指向可变参数列表的指针变量。
va_start:这是一个函数,该函数指定开始处理可变形参的列表,并让指针变量指向可变行参列表的第一个参数。
va_end:结束处理可变形参,释放指针变量。
va_arg:该函数返回获取当前指针指向的参数值,并移动到下一个参数。
#import "Person.h"



@implementation Person



-(void)test:(NSString *)name, ...
{
    va_list argList ; //使用va_list定义一个指针变量,指针变量指向可变参数列表
    if (name) //如果第一个name参数存在,才需要处理后面的参数
    {
        NSLog(@"%@",name); //由于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);
    }
}


@end

一个方法中只能包含一个个数可变的形参,且在形参列表的最后。

2.类的方法

oc的成员变量都是实例变量,并不支持真正的类变量。系统会为实例变量初始化。
@interface Person : NSObject<NSCopying>
{
    NSString * _name ;
    int _age ;
}
实例变量分为  public(公有的,可以在类的外部和内部操作) protected(默认,只能在该类和其子类内操作) privated(私有的,只能在该类内访问)。

单例:如果一个类始终只能创建一个实例,则这个类被称为单例类。实现如下:
#import "Person.h"


static id instance = nil;

@implementation Person



+(id)instance
{
    if (!instance) {
        instance = [[super alloc]init];
    }
    return instance ;
}


@end

#import <Foundation/Foundation.h>

@interface Person : NSObject<NSCopying>

{
    NSString * _name ;
    int _age ;
}

+(id)instance;


@end
定义一个static全局变量,并通过该全局变量缓存已经有的实例,然后实现instance类方法,该方法控制类最多只产生一个实例。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值