//————————————OC的發展歷程—————————————//
1980年,OC語言誕生。
1988年,OC語言庫誕生。
1996年,OC語言成為蘋果公司專用編程語言。
2004年,Mac OS X以“NS”為前綴(Mac OS X使用以UNIX為基礎的操作系統)
2007年,蘋果公司發布了OC2.0版本。
//————————————OC的特點—————————————//
兼容性:在OC的代碼中可以有C++和C語句,它可以調用C的函數,也可以通過C++對象訪問方法。
字符串:通常情況下,OC使用Foundation框架的NSString類型的字符串。
類:定義類是OC的基本功能,OC的類聲明和實現包括兩個部分:接口部分和實現部分。
屬性:屬性是OC2.0提出的概念,它是替代對成員變量訪問的“讀取方法(getter)”和“設定方法(setter)”的手段。
分類:可以通過分類擴展父類的功能。
//————————————OC的編程思想——面向對象編程—————————————//
1.面向對象的三個基本特征:封裝、繼承和多態。
封裝就是把客觀事物封裝成抽象的類。
繼承就是從一般到特殊的過程。
多態提供了同一個接口名稱,通過覆蓋和重載實現不同的功能。
**********************
接口文件和實現文件
1.OC是一個面向對象的語言,所以整個OC程序是由一些類組成的。每個OC類包含兩大塊代碼,分別叫“接口”和“實現”。
***********************
類和實例
1.就像現實世界中的對象一樣,在面向對象編程的世界中,每一個對象都屬于一個類型,這個類型稱為類。類定義了現實世界中的一些事物的抽象特點。在OC中,定義一個類的一般格式如下:
@interface Member : NSObject
{
NSString *name;
int age;
}
- (NSString *)name;
- (int)age;
- (void)setName:(NSString *)input;
- (void)setAge:(int)input;
@end
2.每個類的實例就是一個對象,例如:member就是Member類的對象:
Member *member = [[Member alloc]init];
類是對象的模型,對象是類的一個實例。類是一種邏輯結構,而對象是真正存在的物理實體。
3.面向對象的分析過程大致分為:劃分對象->抽象對象->將類組織成層次結構(通過繼承來完成)。
的
4.面向對象的程序設計就是使用類和實例進行設計與實現程序。
5.UIButton *button = [[UIButton alloc] init];
在數據類型的右邊有一個星號,所有的OC對象變量都是指針類型的。
等號右邊的語句是創建一個對象,這是一個嵌套的方法調用。第一個調用的是UIButton的alloc方法,這是一個相對比較底層的調用,因為該方法其實是為UIButton變量申請一個內存空間。第二個調用的是新創建對象的init方法,這個init方法是初始化變量值。
**********************
消息和方法
1.在面向對象中,直接發給對象的一個命令稱為“消息”,而被調用的代碼稱為方法。給一個對象發送一個消息和調用一個對象的方法基本上同一回事。
2.方法的定義
在OC中,一個方法是類的一部分。一個方法的聲明格式為:
+或者- (返回類型)方法名:(參數類型)參數名;
它包含三個方面:
它是一個類方法還是一個實例方法?
它的參數和返回值
方法的名字。
3.類方法和實例方法
3.1。類方法和實例方法是通過方法定義的“+”或“-”來區分的。
3.2.類方法一般用于兩個目的:
工廠方法:它是給類分配實例的方法。例如,UIFont類有一個類方法fontWithName:Size:。你提供一個名字和一個字體大小,這個UIFont類就返回一個UIFont實例。
全局公用方法:一個類方法也可以是一個公用方法,這些公用方法可以被任何其他類來調用,而且不需要實例化。例如:UIFont類的familyNames方法返回機器上所安裝的字體信息。
4.調用方法
4.1.在OC中,對象的屬性變量屬于對象的內部數據,通常需要訪問這些數據只能通過對象的方法來實現,方法是作用于屬性的函數。
4.2.在OC中,把“調用一個函數”稱為“向一個對象發送一個消息”,或者稱為”調用方法“。調用方法的簡單格式是(假設沒有輸入參數):
[實例 方法];
或者是:[類名 方法];
4.3.一個方法也可以返回值,可以把返回的值放在變量上保存,例如:變量=[實例 方法];
4.4.在OC上,調用一個類或實例的方法,也稱為給這個類或實例發消息。類或實例稱為“接收方”。所以,調用方法的格式也可理解為:[接收方 消息];
4.5.在術語上,整個表達式也叫做消息表達式。例如:
NSString *s2 = [s uppercaseString];//發送消息“uppercaseString”到s
4.6.如果一個消息是一個帶有參數的方法(即在調用一個方法時,可能需要提供輸入參數),那么,每一個參數值跟在一個冒號后面。調用格式為:
[接收方 名字1:參數1 名字2:參數2 名字3:參數3 …];
在術語上,方法的名稱是”名字1:名字2:名字3…”.
4.7.OC允許在一個方法中調用中嵌套另一個方法,如:
[NSString stringWithFormat:[test fromat]];
但是盡量避免在一行代碼里面嵌套調用兩個方法。因為這樣的話,代碼的可讀性不好。
4.8.self類似于java的this,使用self可以調用本類中的方法。
***************************
實例變量
1.實例變量屬于一個對象。
2.從OC2.0開始,可以使用“.”來調用一個實例變量。如:aFraction.numerator。
**************************
創建實例的三種方法
1.間接創建實例
如:NSString *s = [s2 uppercaseString];
2.直接創建實例
發送一個alloc方法給一個類,從而直接創建這個類的實例。alloc類方法是在NSObject類上實現的,NSObject類是根類,其他類都從它這里繼承。在執行alloc之后,系統就為一個實例分配內存。
3.通過nib文件創建和初始化實例
****************************
對象聲明的語法:
類名 *var1, *var2,……….
但是要注意,這只是定義了一個指針變量,尚未為它所包含的數據獲得內存空間。在調用alloc方法之后,這些對象才獲得(分配)空間。例如:
Member *member;
member = [Member alloc];
在術語上,上述例子中的member稱為Member對象,或者稱為Member類的一個實例。另外,除了分配空間外,還需要調用init方法來給這個對象設置初值。
***************************
==:比較的是指針,而不是指向指針的內容。
self:這段代碼中正在起作用的實例。
//——————————————————OC注釋—————————————————//
1.屬性注釋
使用/**注釋*/的文檔注釋格式。這種注釋想較于//注釋的優點是此屬性可以在后面的引用時,在智能提示的下方顯示中文注釋。如圖:
在之后的調用時可以看到如下效果:
并且之后在維護寫完的代碼時,把光標定位在該屬性時可以在右側的quickhelp中快速看到此屬性的解釋。
此外,(1)從實際的開發角度看并不是所有的屬性都需要添加注釋,只要是屬性名能從英文直譯或者簡單明顯的屬性,不需要添加注釋。
(2)以下方式需要添加注釋:
(a).通過屬性名無法快速且明顯的了解該用途的屬性必須會添加注釋,如index到底是誰的index?
(b).類似于狀態的標記可能有0,1,2三種情況的要講幾種情況的注釋一起寫入。
(c).屬性名的英文直譯無法說清時。
2.普通注釋
行注釋:“//”
3.方法集注釋
內容分段:#PRagma mark
其實,其中的注釋根本不用加,因為它都是英語組成的,通過閱讀就可看懂它的意思。
在Xcode中,使用以下方式可以將OC源代碼分割成不同的代碼塊。
#pragma mark - 注釋內容
4.代碼塊注釋
就是xcode中右下角代碼段的使用
5.優先級注釋
就是在代碼后面添加://$$$$$,當然可以修改。
然后需要找他們的時候,只需要在項目搜索里敲上就能快速定位。
//——————————————————OC的文件擴展名—————————————————//
.h:頭文件(也稱為接口文件)。頭文件包含類、類型、函數和常數的聲明。
.m:源代碼文件??梢园琽c和C代碼。
.mm:源代碼文件。帶有這種擴展名的源代碼文件,除了可以包含OC和C代碼外,還可以包含C++代碼。僅在你的OC代碼中確實需要使用C++類或者特性的時候才有這種擴展名。
//——————————————————OC的導入文件—————————————————//
1.使用#import包含頭文件
在C/C++中,為了防止頭文件重復包含,我們經常需要用如下代碼定義.h文件
#ifndef _MYSOMETHING_H
#define _MYSOMETHING_H
。。。
#endif
OC提供了一個預編譯指令#import來簡化#include的做法,使用#import,就不用在每個頭文件里定義上面的3行條件編譯語句。
當然,在OC中,還可以使用#include包含.h文件,但是,很顯然,使用#import更方便。
2.導入文件
在.h文件中導入其他的類,使用@class指令。
在.m文件中導入其他的類,使用#import指令。
我的CSDN博客地址:http://blog.csdn.net/qw963895582/article
新聞熱點
疑難解答