实例方法和类方法的区别
区别1:
实例方法: 实例方法属于实例,也就是说属于对象,通过实例调用的方法就是实例方法,实例方法只能通过实例(对象)调用
声明方式: -(返回值)方法名:参数 强调的是 “-”
类方法: 类方法属于类的,调用的时候,只能使用类名调用
声明方式:+(返回值)方法名:参数 强调的是 “+”
区别2:
实例方法: 实例方法在运行时只关注实例的信息(实例变量),实例方法中可以访问或修改实例变量
类方法: 类方法在运行时只关注类中的信息,类方法中不可访问或修改实例变量
区别3:
实例方法: 实例方法中可以访问类方法
类方法: 类方法中不能访问实例方法
工厂方法
工厂方法是类方法
工厂创建对象用
工厂方法 返回值是 当前类型, 方法名去掉前缀首字母小写如 TRPoint类的工厂方法名是 point
下面来上代码:
main.m文件的代码
#import
#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
@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(@"我也是一个类方法");
}
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。