pragma mark 第一個OC方法2
pragma mark 概念
/**
// OC中的類方法用 + 表示, OC中的對象方法用 - 表示
*/
pragma mark 代碼
#import <Foundation/Foundation.h>
/*
事物名稱:iPhone
屬性: 顏色, 型號, CPU, 尺寸 == 成員變量
行為: 打電話, 發(fā)短信, 上網(wǎng), 獲取本機(jī)信息 == 成員方法
*/
// 1.編寫類的聲明
@interface IPhone : NSObject
{
@public
float _model; // 型號
int _cpu; // CPU
double _size; // 尺寸
int _color; // 顏色
}
// 行為
// OC中的行為 和 C語言中的函數(shù)一樣, 都是用來保存一段特定功能的代碼
// C語言中定義一個函數(shù), 分為聲明和實現(xiàn) , 聲明寫在.h中, 實現(xiàn)寫在.c中
// OC中定義一個方法, 也分為聲明和實現(xiàn), 聲明寫在interface中, 實現(xiàn)寫在@implmentation中
// C語言的函數(shù)分兩種 : 內(nèi)部函數(shù)和外部函數(shù)
// OC中的方法也分為兩種; 類方法和對象方法
// 類方法職能用類名調(diào)用, 對象方法職能用對象調(diào)用
// OC中的類方法用 + 表示, OC中的對象方法用 - 表示
// 編寫C語言函數(shù)的規(guī)律: 1.確定函數(shù)名稱 2.確定形參 3.確定返回值 4.確定返回值類型
// 編寫OC方法也有規(guī)律, 規(guī)律和C語言一模一樣
// C語言函數(shù)
//void about()
//{
// printf("model = cpu = size = color");
//}
#warning oc方法 聲明
// OC 方法
// 注意: OC中的方法, 如果沒有形參不需要寫(), 而是直接寫一個;
// 為什么OC沒有形參不需要寫()呢? 因為OC方法中的()有特殊的用途,OC方法中的() 是用來 擴(kuò)住數(shù)據(jù)類型的
-(void)about;
// C語言的函數(shù):
// 沒有返回值 沒有參數(shù)的
// 有才返回值 沒參數(shù)的
// 有返回值 有參數(shù)
// 沒有返回值 有參數(shù)
// 有返回值沒有參數(shù): 請讀取短信
- (char *)loadMessage;
// 有返回值有參數(shù)的, 打電話
// int singnal(int number);
// 注意: OC中的方法如果有參數(shù),那么每個參數(shù)的數(shù)據(jù)類型前面必須加上一個
// 注意: 當(dāng)前這個有參數(shù)的方法名稱是:singnal
// 冒號也是方法名稱的一部分
- (int)singnal:(int)number;
// 有返回值并且多個參數(shù),發(fā)短信
// int sendMessage(int number, char *content);
// 下面的方法的名稱, sendMessage::
- (int)sendMessage:(int)number : (char *)content;
// 為了提高我們的閱讀性,OC方法允許我們給每個參數(shù)添加上一個標(biāo)簽, 來說明當(dāng)前參數(shù)的定義
// 注意: 標(biāo)簽也是方法名的一部分
// 方法名 sendMessageWithNumber:andContent:
- (int)sendMessageWithNumber:(int)number andContent: (char *)content;
@end
@implementation IPhone
#warning oc方法 實現(xiàn)
// 行為的實現(xiàn)
-(void)about
{
// 如果在對象方法中想訪問該對象的屬性, 可以直接寫上 _屬性名稱即可
// NSLog(@"打印本機(jī)信息");
NSLog(@"打印本機(jī)信息 %f",_model,_cpu,_size,_color);
}
- (char *)loadMessage
{
return "我";
}
int singnal(int number)
{
return 1;
}
- (int)singnal:(int)number
{
NSLog(@"打電話給%i",number);
return 22;
}
- (int)sendMessage:(int)number : (char *)content
{
NSLog(@"發(fā)短信 %i,內(nèi)容 = %s",number,content);
return 33;
}
@end
int main(int argc, const char * argv[])
{
// 通過類創(chuàng)建對象
IPhone *p = [IPhone new];
p->_size = 5.5; //is protected(是 受保護(hù)的)
p-> _color = 0;
p->_model = 4;
p->_cpu = 22;
// 獲取對象的屬性
NSLog(@"size = %f,color = %i,model = %f,cpu = %i",p->_size,p->_color,p->_model,p->_cpu);
// OC中的類 其實 本質(zhì)就是一個結(jié)構(gòu)體, 所以p這個指針 其實就是指向了一個結(jié)構(gòu)體
// 如何給對象發(fā)消息 (如何調(diào)用對象方法)
[p about];
// 注意: OC中的NSLog對C語言的字符串支持不是很好,如果返回的中文的C語言字符串 可能編譯出現(xiàn)的亂碼,也有可能什么都不輸出
char *content = [p loadMessage];
NSLog(@"conteent = %s",content);
[p singnal:1234];
[p sendMessage:1332918282 :"luck"];
return 0;
}