久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

ios開發(fā)中類方法與self的注意點 與實例方法區(qū)別

 quasiceo 2015-04-01
ios開發(fā)中類方法與self的注意點 與實例方法區(qū)別
2014-12-15      0 個評論    來源:sammyieveo的專欄  
收藏    我要投稿

Objective-C里面既有實例方法也類方法。類方法(Class Method) 有時被稱為工廠方法(Factory Method)或者方便方法(Convenience method),。工廠方法的稱謂明顯和一般意義上的工廠方法不同,,從本質上來說,類方法可以獨立于對象而執(zhí)行,,所以在其他的語言里面類方法有的時候被稱為靜態(tài)方法,。
注意點一:類方法
1,類方法可以調用類方法,。
2,,類方法不可以調用實例方法,但是類方法可以通過創(chuàng)建對象來訪問實例方法,。
3,,類方法不可以使用實例變量。類方法可以使用self,,因為self不是實例變量,。
4,類方法作為消息,,可以被發(fā)送到類或者對象里面去(實際上,,就是可以通過類或者對象調用類方法的意思)。
注意點二:self的規(guī)則
大家需要記住下面的規(guī)則:
1,,實例方法里面的self,,是對象的首地址。
2,,類方法里面的self,,是Class.
盡管在同一個類里面的使用self,但是self卻有著不同的解讀,。在類方法里面的self,,可以翻譯成class self;在實例方法里面的self,,應該被翻譯成為object self,。在類方法里面的self和實例方法里面的self有著本質上的不同,盡管他們的名字都叫self,。

類方法創(chuàng)造的對象要不要用release釋放,?
答 不需要 這個對象被放到自動釋放池中

Object-C中的私有方法和私有成員變量

成員變量默認對內(nèi)是共有的,,對外是私有的。

@interface Controller : NSObject
{

@private: NSString *something;
}
+ (void)thisIsAStaticMethod;
- (void)thisIsAnInstanceMethod;
@end

@interface Controller (Private)
- (void)thisIsAPrivateMethod;
@end

下面的代碼就是怎樣獲取私有變量(記得加頭文件#import ):

NSString *str;
Mobj *obj = [[Mobj alloc] init];
object_getInstanceVariable(obj, "mt_", (void *)&str);
NSLog(@"%@",str);
[obj release];

//===================================

IOS實例方法和類方法的區(qū)別

類方法和實例方法
1:實例方法是— 類開頭是+ 實例方法是用實例對象訪問,,類方法的對象是類而不是實例,,通常創(chuàng)建對象或者工具類。
在實例方法里,,根據(jù)繼承原理發(fā)送消息給self和super其實都是發(fā)送給self
在類方法里面self是其他的類的類方法,,在類方法中給self發(fā)送消息只能發(fā)類方法self是類super也是
什么時候用類方法,要創(chuàng)建一個實例時候獲取一個共享實例,,或者獲取關于類的一些共有信息
2:

類方法(class method)和實例方法(instance method),。類方法被限定在類范圍內(nèi),不能被類的實例調用(即脫離實例運行),。alloc就是一種類方法,。實例方法限定在對象實例的范圍內(nèi)(即實例化之前不能運行)。init就是一種實例方法,,被alloc方法返回的對象實例調用,。


NSObject * object1 = [[NSObject alloc] init];

instance method 以減號 "-" 開頭
class method 以加號 “+” 開頭,相當于static方法
3:see see 更健康

Objective-C

1.OC是一門基于C的面向對象語言,,是C語言的一個超集,,同時具有C語言的特征


2.OC對類的定義和實現(xiàn)以及初始化


//聲明類接口,繼承NSObject對象(該對象是OC中所有類的頂級父類,,所有類都繼承于它)

@interface ClassName :NSObject

//成員屬性和成員函數(shù)的聲明

+(void)function,;//類方法,不需要實例化對象就可以調用的方法

- (void)function2 :(NSString *)arg,;//成員方法,,必須通過實例化的對象調用

@end


//實現(xiàn)類

@imlementation ClassName

//成員屬性初始化和方法的定義

@end


對象的初始化:ClassName *obj = [[ClassName alloc] init]

OC中以消息機制傳遞信息,發(fā)送alloc消息給類分配內(nèi)存空間,,發(fā)送init消息生成對象,,指針指向對象本身。


3.類方法的調用

[obj function],;

NSString *str = [NSString stringWithString:@"hello"];

[obj function2 : str];


4.輸出函數(shù)

根據(jù)不同的輸出格式輸出不同的值 (%d :整形 ,,%@:對象<發(fā)送description消息>,%s:字符串)

NSlog(@“The result is %d”,intNum);

CF代表Core Foundation (Cocoa)

CFShow發(fā)送description給它顯示的對象,,CFShow打印的信息不會顯示時間戳,,NSLog會顯示,同時CFShow不需要格式字符 串,,它只能用于對象

CFShow(obj);


5.屬性

支持點表示法:myTableViewCell.textLabel.text = @"hello" 等價于 [[myTableViewCell textLabel] setText:@"hello"];


使用屬性生成器 property

在h文件中聲明: @property int year

在m文件中合成生成器:@synthesize year

使用 obj.year = 1999 相當于調用了 [obj setYear:1999];


可以自定義取值方法和賦值方法(getter and setter)

-(int)year

{

return year;

}


- (void) setYear : (int) newYear

{

//此處添加了一些基本的內(nèi)存管理方法,,保留新的值,釋放以前的值

if(newYear != year)

{

[year release];

year = [newYear retain];

}

}


也可以繞過oc的命名約定,,自己指定getter和setter方法的名稱,;

@property(getter = isExist,setter = setExist:) BOOL exist;

@synthesize exist;

使用過程中既可以使用新定義的方法名,也可以使用以前的方法(點表示法)


屬性的特性:readwrite readonly assign retain copy nonatomic

assign:默認行為,,使用@property int year就使用了assign行為,,就是給實例變量賦了一個值

retain:實現(xiàn)了兩個功能,一個是保留了賦值時傳遞的對象,,其次是賦值前釋放了以前值,,使用retain可以實現(xiàn)上面討論的內(nèi)存管理的優(yōu)點,使用時加上 @property (retain)int year,;

copy:發(fā)送一條復制的消息給被傳遞的對象,,保留它,并釋放任何以前的值,;

nonactomic:非原子訪問器,,加上后可以提升訪問速度,但當兩個線程同時修改同一個屬性時就會出現(xiàn)問題,,原子屬性可以保證屬性在被一個線程使用時不被另一個線程訪問,,不存在atomic關鍵字,默認情況下,,所有方法都是自動合成的,。(類似與java中的線程鎖機制synchronized)

readwrite:可讀寫

readonly:只讀




    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報,。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多