1.對象方法:
- (1)對象方法的實(shí)現(xiàn)只能寫在@implementation...@end中,對象方法的聲明只能寫在 @interface...@end中間
- (2)對象方法都以-號開頭,類方法都以+號開頭
- (3)對象方法只能由對象來調(diào)用,類方法只能由類來調(diào)用,不能當(dāng)做函數(shù)一樣調(diào)用
- (4)函數(shù)屬于整個(gè)文件,可以寫在文件中的任何位置,包括@implementation...@end中,但寫在 @interface...@end會(huì)無法識別,函數(shù)的聲明可以在main函數(shù)內(nèi)部也可以在main函數(shù)外部。
- (5)對象方法歸類\對象所有
2.函數(shù):
- (1)所有的函數(shù)都是平行的
- (2)函數(shù)不存在隸屬關(guān)系
- (3)使用的時(shí)候可以直接調(diào)用
- (4)不可以訪問對象中的成員變量
//
// main.m
// 函數(shù)和方法的區(qū)別
//
// Created by wenjim on 17/8/28.
// Copyright 2017年 WenJim. All rights reserved.
//
#import <Foundation/Foundation.h>
/*
函數(shù)和方法的區(qū)別
1.函數(shù)屬于整個(gè)文件,方法屬于某一個(gè)類
方法如果離開類就不行
2.函數(shù)可以直接調(diào)用,方法必須用對象或者類調(diào)用
注意:雖然函數(shù)屬于整個(gè)文件,但是如果把函數(shù)寫在類的聲明中會(huì)不識別
3.不能把函數(shù)當(dāng)做方法來調(diào)用,也不能把方法當(dāng)做函數(shù)來使用
方法的注意點(diǎn):
方法可以沒有聲明只有實(shí)現(xiàn)
方法可以只有聲明沒有實(shí)現(xiàn),編輯不會(huì)報(bào)錯(cuò),但是運(yùn)行會(huì)報(bào)錯(cuò)
如果方法只有聲明沒有實(shí)現(xiàn),那么運(yùn)行時(shí)會(huì)報(bào)錯(cuò):
reason: '+[Person demoTwo]: unrecognized selector sent to class 0x1000011c0'
發(fā)送了一個(gè)不能識別的消息,在Person類中沒有+開頭的demoTwo方法
*/
@interface Person : NSObject
// 對象方法聲明
-(void)test;
// 類方法聲明
+(void)demo;
+(void)demoTwo;
@end
@implementation Person
// 對象方法實(shí)現(xiàn)
-(void)test
{
NSLog(@"Test");
}
// 類方法實(shí)現(xiàn)
+(void)demo
{
NSLog(@"Demo");
}
+(void)demoOne
{
NSLog(@"DemoOne");
}
@end
// 外部函數(shù)的聲明
extern void sum();
// 內(nèi)部函數(shù)的聲明
static void minus();
// 外部函數(shù)
void sum()
{
printf("sum");
}
// 內(nèi)部函數(shù)
static void minus()
{
printf("minus");
}
int main(int argc, const char * argv[]) {
// sum();
[Person demoOne];
// [Person demoTwo];
return 0;
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。