温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

08.实例方法和类方法的区别与及工厂方法

发布时间:2020-06-22 19:28:03 来源:网络 阅读:472 作者:forest冯宋林 栏目:开发技术


实例方法和类方法的区别
区别1:
        实例方法: 实例方法属于实例,也就是说属于对象,通过实例调用的方法就是实例方法,实例方法只能通过实例(对象)调用
        声明方式: -(返回值)方法名:参数  强调的是  “-”
        
        类方法:        类方法属于类的,调用的时候,只能使用类名调用
        声明方式:+(返回值)方法名:参数   强调的是 “+”

区别2:
         实例方法: 实例方法在运行时只关注实例的信息(实例变量),实例方法中可以访问或修改实例变量

        类方法:    类方法在运行时只关注类中的信息,类方法中不可访问或修改实例变量

区别3:
        实例方法: 实例方法中可以访问类方法
        类方法: 类方法中不能访问实例方法


工厂方法
        工厂方法是类方法
        工厂创建对象用
        工厂方法 返回值是 当前类型, 方法名去掉前缀首字母小写如 TRPoint类的工厂方法名是 point

下面来上代码:


main.m文件的代码


#import <Foundation/Foundation.h>
#import "MyPoint.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        MyPoint *point = [[MyPoint alloc]init];

        //实例方法属于实例,用实例调用
        [point show];

        //类方法属于类,用类名调用
        //[point2 show2];error

         [MyPoint show2];//right

        MyPoint *point2 = [ MyPoint createPoint];
        [point2 show];//x = 10,y = 20
    }
    return 0;
}


Mypoint.h文件的代码

#import <Foundation/Foundation.h>

@interface MyPoint : NSObject
@property int x;
@property int y;
-(id)init;
//With W一定要大写
//-(id)initWithX:(int)x andY:(int)y;
-(void)show;//声明实例方法
+(void)show2;//声明类方法
+(void)show3;//声明类方法
+(id)createPoint;//创建点的类方法
@end


MyPoint.m文件的代码

#import "MyPoint.h"


@implementation MyPoint
-(id)init
{
    self = [super init];
    if (self) {
        self.x = 100;//_x = 100;
        self.y = 200;
    }
    
    return  self;
}

-(void)show
{
    //实例方法可以修改实例变量,实例方法中self表示当前对象,通过对象可以找到实例变量
    NSLog(@"x = %d,y = %d",_x,_y);
    
    //实例方法中可以调用类方法   
    //[MyPoint show2];
    
}

+(void)show2
{
    //类方法中self不再是对象,那么类方法中就没有当前对象的概念了,找不到对象就更加找不到对象中的实例变量了
    //类方法中不可以访问实例变量
   // NSLog(@"x = %d,y = %d",_x,_y);
    //类方法中self标书当前类
    NSLog(@"类方法被调用");
    
    //类方法中不可以调用实例方法

    //[self show];error
    
    //类方法中可以调用类方法
    [self show3];
}

+(void)show3
{
    NSLog(@"我也是一个类方法");
}



向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI