函數(shù)和方法的區(qū)別
1.函數(shù)屬于整個(gè)文件, 方法屬于某一個(gè)類
方法如果離開類就不行
2.函數(shù)可以直接調(diào)用, 方法必須用對象或者類來調(diào)用
注意: 雖然函數(shù)屬于整個(gè)文件, 但是如果把函數(shù)寫在類的聲明中會不識別
3.不能把函數(shù)當(dāng)做方法來調(diào)用, 也不能把方法當(dāng)做函數(shù)來調(diào)用
方法的注意點(diǎn):
方法可以沒有聲明只有實(shí)現(xiàn)
方法可以只有聲明沒有實(shí)現(xiàn), 編譯不會報(bào)錯(cuò), 但是運(yùn)行會報(bào)錯(cuò)
如果方法只有聲明沒有實(shí)現(xiàn), 那么運(yùn)行時(shí)會報(bào):
reason: '+[Person demo]: unrecognized selector sent to class 0x100001140'
發(fā)送了一個(gè)不能識別的消息, 在Person類中沒有+開頭的demo方法
reason: '-[Person test]: unrecognized selector sent to instance 0x100400000'
類也有一個(gè)注意點(diǎn):
類可以只有實(shí)現(xiàn)沒有聲明
注意: 在開發(fā)中不建議這樣寫
#import <Foundation/Foundation.h>
//@interface Person : NSObject
//// 對象方法聲明
//- (void)test;
//// 類方法聲明
//+ (void)demo;
//
//@end
@implementation Person : NSObject
// 對象方法實(shí)現(xiàn)
- (void)test
{
NSLog(@"test");
}
// 類方法實(shí)現(xiàn)
+ (void)demo
{
NSLog(@"demo");
}
@end
// 外部函數(shù)的聲明
extern void sum();
// 內(nèi)部函數(shù)的聲明
static void minus();
// 外部函數(shù)
extern void sum()
{
printf("sum");
}
// 內(nèi)部函數(shù)
static void minus()
{
printf("minus");
}
int main(int argc, const char * argv[]) {
sum();
// [Person demo];
// demo();
// [Person sum];
// [Person demo];
Person *p = [Person new];
[p test];
return 0;
}