實例方法和類方法的區別
區別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(@"我也是一個類方法");
}
另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
當前名稱:08.實例方法和類方法的區別與及工廠方法-創新互聯
URL鏈接:http://m.newbst.com/article44/dsojee.html
成都網站建設公司_創新互聯,為您提供移動網站建設、虛擬主機、企業網站制作、域名注冊、網站內鏈、軟件開發
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯