亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Objective-C面向對象(一)

2019-11-14 19:14:05
字體:
來源:轉載
供稿:網友

1.類和對象

1.1定義類

面向對象的程序設計中有兩個重要概念:類(class)和對象(object),類事某一批對象的抽象,對象是一個具體存在的實體。

Objective-C定義類需要氛圍2個步驟

  • 接口部分 :定義該類包含的成員變量和方法。
  • 實現部分 :為該類的方法提供實現。

定義接口部分的語法:

@interface MyClass:NSObject
{
int count;
id
data;
NSString* _name;
}
-(id)initWithString:(NSString)aName;
+(MyClass
)createMyClassWithString:(NSString* aName);
@end
@interface用于聲明定義類的接口部分,@end表明定義結束。其后緊跟該類d一對花括號用于聲明該類的成員變量;花括號后面的部分用于聲明該類的方法。定義類的接口聲明部分防災頭文件中。

  • 成員變量:用于描述該類的對象的狀態數據
  • 方法:用于描述該類的行為

定義成員變量
類型 成員變量名;

聲明方法:

- (void)insertObject:(id)anObject atIndex:(NSUInteger)index

方法類型標識:+ 或者- ,+代表該方法是類方法,直接類型即可調用;-代表該方法是實例方法,必須對象才能調用。

返回值類型:可以是OC允許的任何數據類型。

方法簽名關鍵字:由方法名,行參標簽和冒號組成。OC建議為后面的每個行參都指定一個行參標簽,該行參標簽可以很好的說明該行參的作用。

Objective-C的方法聲明中,所有的類型(包括void)都應該使用圓括號括起來。

定義實現部分的語法:

@implementation MyClass { int _count; id _data; NSString* _name; } -(id)initWithString:(NSString*)aName { //方法體 } +(MyClass*)createMyClassWithString:(NSString*)aName { //方法體 }

說明:

  1. 類實現部分的類型必須和類借口部分的類名相同。用于表示這是同一個類的接口部分和實現部分。

  2. 類實現部分也可以在類名后使用 ":父類名" 來表示繼承了某個父類,單一般沒必要。

  3. 類實現部分也可聲明自己的成員變量,但這些成員變量只能在當前類訪問。

    4.類實現部分必須為類聲明部分的每個方法提供方法定義。

1.2對象的產生和使用

定義變量: 類名* 對象名

創建對象: [[類名 alloc] 初始化方法]

alloc是OC的關鍵字,負責為類分配內存空間,創建對象,調用初始化方法對該實例執行初始化。所有的對象都繼承類NSObject ,所有的類都有一個默認的初始化方法:init.

也可以使用new創建對象 [類名 new]

OC調用方法的語法為:[調用者 方法名:參數 行參標簽:參數值 ...]

1.3 self

self關鍵字總是指向調用該方法的對象。self關鍵字最大的作用是讓類中的一個方法訪問該類中另一個方法或者成員變量。

#import <Foundation/Foundation.h>@interface FKWorf:NSObject{	NSString* _name;}-(void) setName:(NSString*)_name;-(void) info;@end@implementation FKWorf-(void) setName:(NSString*) n{	self->_name = n;}-(void) info{	NSLog(@"我是%@",self->_name);}@end int main(int argc, char const *argv[]){		@autoreleasepool	{		FKWorf* worf = [[FKWorf alloc] init];		[worf info];	}	return 0;}

1.4 id類型

任意類型的對象都可復制給id類型的變量

id p = [[FKWorf alloc] init];[p info];

2.方法詳解

OC中方法的所屬性:

  • 方法不能獨立定義,只能定義在類中
  • 從邏輯意義上看,方法要么屬于該類本身(+),要么屬于該類的一個對象(-)
  • 永遠不能獨立執行方法,執行方法必須使用類或對象作為調用者

2.1 形參個數可變的方法

定義方法時,在最后一個形參后增加逗號和三點(,...),則表明該形參可以接受多個參數值。

長度可變的形參只能處于形參列表的最后,一個方法中最多只能包含一個長度可變的形參。

定義語法:-(void)test:(NSString*)name,...

獲取形參:

  • va_list,定義指向可變參數列表的指針
  • va_start,函數,制定開始處理可變形參的列表,并讓指針指向可變形參列表的第一個參數
  • va_end,結束處理可變形參,釋放指針變量
  • va_arg,該函數范湖獲取指針當前指向的參數的值,并將指針指向下一個參數
-(void)test:(NSString*)name,...{	va_list argList;	//如果第一個name參數存在,才需要處理后面的參數	if(name)	{		NSLog(@"%@",name);		va_start(argList,name);		NSString* arg = va_arg(argList,id);		while(arg)		{			NSLog(@"%@",arg);			arg = va_arg(argList,id);		}		va_end(argList);	}}

3.成員變量

成員變量指的是在類接口部分或類實現部分定義的變量,OC的成員變量都是實例變量。

訪問實例變量 實例->實例變量

聲明實例變量,系統會為實例變量執行默認初始化,基本類型的實例變量默認被初始化為0,指針類型的成員變量默認被初始化nil

4.隱藏和封裝

4.1封裝

封裝是指將對象的狀態信息隱藏在對象內部,不允許外部程序直接訪問對象內部信息 ,而是通過該類提供的方法類實現對內部信息的操作和訪問。

4.2 訪問控制符

4個訪問控制符:@PRivate,@package,@protected,@public

4.3 @package 訪問控制符

@package修飾的成員變量,可以在當前類和同一鏡像的中訪問,同一鏡像是指,編譯后生成的同一個框架或同一個執行文件

4.4合成存取方法

  1. 在類接口部分使用@property指令定義屬性。使用@property定義屬性無需放在類接口的花括號里,直接放在@interface@end之間。@property指示符放在屬性定義的最前面。
  2. 在類中實現的部分使用@synthesize指令聲明該屬性。

以上步驟會合成成對的setter和getter方法,還會自動在類實現部分定義一個與getter方法同門的成員變量。

@sythesize property名[=成員變量名]

#import <Foundation/Foundation.h>@interface FKUser:NSObject@property (nonatomic) NSString* name;@property NSString* pass;@property NSDate* birth;//-(void)setName:(NSString*) name;@end@implementation FKUser@synthesize name=_name;@synthesize pass;@synthesize birth;-(void)setName:(NSString*) name{	self->_name=[NSString stringWithFormat:@"+++%@",name];}@endint main(int argc, char const *argv[]){	FKUser* user=[[FKUser alloc] init];	[user setName:@"唐僧"];	[user setPass:@"1234"];	[user setBirth:[NSDate date]];	NSLog(@"name=%@,pass=%@,birth=%@",[user name],[user pass],[user birth]);	return 0;}

@property和類型間用括號的額外指示符

  1. assign 指定對屬性只是簡單賦值,不更改對所賦的值的引用計數。用于NSinteger及short float double 結構體等C數據類型
  2. atomic(nonatomic) 默認atomic,指定合成的方法是否為原子操作,當一個線程進入存取方法的方法體后,其他線程無法進入該存、去方法,避免多線程冰法破壞對象的完整性。
  3. copy 使用copy,當調用setter方法對成員變量賦值時,會將被賦值的對象復制一個副本,再講該副本賦值給成員變量。
  4. getter、setter 用于為合成的getter、setter方法指定自定義方法名
    語法@property (assign,nonatomic,getter=wawa,setter=nana:) int price;
  5. readonly,readwrite(默認) ,readonly 指示系統只合成getter方法
  6. retain 屬性賦值時,原來所引用的對象的引用計數器減1,被賦值的對象引用計數加1
  7. strong,weak 強引用、弱引用,強引用指向被賦值的對象,name對象就不會自動回收;弱引用指向的對象可能被回收
  8. unsafe_unretainedweak相似,unsafe_unretained所引用的對象被回收后,unsafe_unretained指針不會被賦值為nil,可能導致程序崩潰

4.5 點語法


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美精品久久久久久久久久| 伊人亚洲福利一区二区三区| 95av在线视频| 欧美日韩国产激情| 欧美激情va永久在线播放| 亚洲综合在线做性| 26uuu久久噜噜噜噜| 国产精品精品久久久| 欧美黄色性视频| 高清亚洲成在人网站天堂| 精品精品国产国产自在线| 亚洲欧美日韩第一区| 日韩av电影手机在线观看| 在线国产精品播放| 成人444kkkk在线观看| 日韩精品在线观看一区二区| 久久综合久久美利坚合众国| 韩国19禁主播vip福利视频| 日韩最新在线视频| 91精品国产高清久久久久久91| 蜜臀久久99精品久久久无需会员| 欧美性猛交xxxx富婆弯腰| 亚州精品天堂中文字幕| 国产精品91久久久| 欧美成人网在线| 亚洲精品videossex少妇| 国产亚洲欧洲黄色| 亚洲片国产一区一级在线观看| 欧美激情视频在线免费观看 欧美视频免费一| 国产一区二区三区直播精品电影| 国产精品久久久久久久久久ktv| 亚洲va国产va天堂va久久| 成人国产精品av| 欧美性xxxx极品hd欧美风情| 日韩欧美中文字幕在线播放| 亚洲在线一区二区| 欧美日韩在线视频观看| 日韩欧美在线视频免费观看| 日韩精品欧美激情| 成人免费高清完整版在线观看| 亚洲国产精品久久久久秋霞蜜臀| 黄色91在线观看| 国产成人激情小视频| 久久精品亚洲94久久精品| 亚洲国产成人在线播放| 久久久久久高潮国产精品视| 日韩成人免费视频| 国产精品一区久久| 国产精品99久久久久久白浆小说| 91国产视频在线| 日本国产一区二区三区| 国内偷自视频区视频综合| 国产精品专区h在线观看| 国产成人精品av在线| 久久久久一本一区二区青青蜜月| 欧美成人激情视频免费观看| 久久九九亚洲综合| 午夜精品在线视频| 国产午夜精品视频免费不卡69堂| 欧美激情喷水视频| 日韩欧美中文字幕在线播放| 亚洲色图17p| 亚洲国产成人在线视频| 亚洲国产精品va在线观看黑人| 欧美床上激情在线观看| 国产精品91久久久久久| 成人av电影天堂| 91精品在线一区| 欧美成人全部免费| 日韩黄色av网站| 国产97在线视频| 在线视频免费一区二区| 国产情人节一区| 在线亚洲欧美视频| 日韩国产中文字幕| 国产精品美女主播在线观看纯欲| 色哟哟亚洲精品一区二区| 亚洲精品国精品久久99热| 69av在线视频| 亚洲精品色婷婷福利天堂| 欧美日韩在线视频首页| 国产精品爽爽爽爽爽爽在线观看| 成人网在线视频| 91久久在线观看| 亚洲一区二区日本| 中文字幕综合一区| 欧美色欧美亚洲高清在线视频| 懂色av影视一区二区三区| 国产a∨精品一区二区三区不卡| 国产亚洲精品成人av久久ww| 欧美日韩成人网| 国产在线视频2019最新视频| 久久久久久久久久国产精品| 久久99视频免费| 中文字幕av一区二区三区谷原希美| 91久久久久久久久久久| 亚洲 日韩 国产第一| 欧美激情啊啊啊| 亚洲欧美日韩综合| 欧美一级免费视频| 亚洲一区二区三区在线免费观看| 俺去亚洲欧洲欧美日韩| 亚洲精品国产综合区久久久久久久| 最近日韩中文字幕中文| 成人网在线视频| 久久精品国产亚洲一区二区| 国产精品视频午夜| 国产精品自产拍在线观看| 这里只有精品视频| 国产在线精品成人一区二区三区| 奇米四色中文综合久久| 一区二区欧美日韩视频| 成人做爽爽免费视频| 亚洲电影在线观看| 91视频8mav| 91精品一区二区| 91精品视频在线免费观看| 欧美激情视频一区二区三区不卡| 蜜臀久久99精品久久久久久宅男| 在线播放国产精品| 色偷偷88888欧美精品久久久| 清纯唯美亚洲综合| 精品国产乱码久久久久久虫虫漫画| 亚洲欧美日韩一区二区在线| 亚洲国产精品一区二区三区| 精品久久久视频| 国产视频久久久久| 色www亚洲国产张柏芝| 国产精品中文在线| 国产精品欧美一区二区三区奶水| 欧美日本高清一区| 成人激情视频网| 亚洲aa中文字幕| 欧美亚洲国产精品| 欧美亚洲成人xxx| 国产一区二区动漫| 久热精品视频在线观看一区| 伊人伊成久久人综合网小说| 一区二区欧美久久| 成人妇女免费播放久久久| 国产精品爱久久久久久久| 久久久综合av| 九九久久久久99精品| 91色在线视频| 美女999久久久精品视频| 成人亲热视频网站| 精品亚洲一区二区三区四区五区| 欧美日韩国产一区中文午夜| 国产成人在线视频| 日韩欧美一区二区在线| 亚洲变态欧美另类捆绑| 国产精品午夜国产小视频| 国产精品草莓在线免费观看| 色综合天天狠天天透天天伊人| 日韩电影在线观看中文字幕| 精品综合久久久久久97| 中文字幕九色91在线| 亚洲欧美日韩天堂一区二区| 久久91精品国产91久久跳| 日韩在线视频中文字幕| 欧美黑人巨大精品一区二区| 欧美性猛交99久久久久99按摩| 国产在线一区二区三区| 国产精品福利在线观看网址|