实例方法和类方法的区别
区别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(@"我也是一个类方法");
}
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。