您好,登錄后才能下訂單哦!
實例方法和類方法的區別
區別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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。