青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

CG@CPPBLOG

/*=========================================*/
隨筆 - 76, 文章 - 39, 評論 - 137, 引用 - 0
數據加載中……

用OBJC編程 3 -Encapsulating Data

用OBJC編程3-Encapsulating Data

@interface XYZPerson :NSObject
@property NSString *firstName;
@property NSString *lastName;
@end

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

NSString *firstName = [somePerson firstName];
[somePerson setFirstName:@"Johnny"];

限定屬性為只讀,也可限定為readwrite,但這不必,因為缺省如是。
@property (readonly) NSString *fullname;

可以指定屬性的訪問器名稱,多個限定詞如下格式
@property (readonly, getter=isFinished) BOOL finished;

使用點語法
NSString *firstName = somePerson.firstName;
// NSString *firstName = [somePerson firstName];
somePerson.firstName = @"Johnny";
// [somePerson setFirstName:@"Johnny"];

大多數屬性有一個實例變量。
缺省的讀寫屬性會由編譯器自動生成一個實例變量,以下劃線開始,如_firstName;
-(void) someMethod{
  NSString *myString = @"An interesting string";
  _someString = myString;
  
// self.someString = myString;
  
// or
  
// [self setSomeString:myString];
}

可以指定實例變量的名字
@implementation YourClass
@synthesize propertyName = instanceVariableName;
@end
// ---- for example

@synthesize firstName = ivar_firstName;

如果你不指定名字,實例變量則和屬性同名,前面沒有下劃線
@synthesize firstName;

如果你并不想提供數值給其它對象,你不必聲明一個屬性而使用一個實例變量
@interface SomeClass: NSObject{
  NSString *_myNonPropertyInstanceVariable;
}
@end

@implementation SomeClass{
  NSString *_anotherCustomInstanceVariable;
}

在初始化方法里訪問實例變量
Setter方法會有附加效果。它們可能觸發KVC通知,或者完成你定制的方法。
你應該在初始化方法里直接訪問實例變量,因為對象還沒有初始化完成。甚至你不應該提供定制的訪問器方法給你的類提供附加效果。這樣將來的子類可以很好的override這個行為。
一個典型的init方法如下
-(id)init{
  self = [super init];
  
if(self){
    
// initialize instance variables here
  }
  
return self;
}

可以指定初始化方法
-(id)initWithFirstName:(NSString *)aFirstName lastName:(NSString *)aLastName{
  self = [super init];
  
if(self){
    _firstName = aFirstName;
    _lastName = aLastName;
  }
  
return self;
}

可以指定訪問方法
@property (readonly) NSString *fullName;
// -------------
-(NSString *)fullName{
 
return [NSString stringWithFormat:@"%@ %@", self.firstName, self.lastName];
}

如果你需要在訪問器里訪問實例變量,那應該直接訪問。例子里延遲初始化一個對象,lazy accessor。
- (XYZObject *)someImportantObject {
  
if(!_someImportantObject){
    _someImportantObject = [[XYZObject alloc] init];
  }
  
return _someImportantObject;
}

編譯器會自動synthesize一個實例變量。至少一個訪問方法。如果你為readwrite屬性實現了getter和setter,或者為readonly實現了getter。編譯器認為你想控制屬性實現,也不會再為你自動生成一個實例變量。因此,如果你仍然需要一個實例變量,你需要手動synthesize
@synthesize property = _property;

屬性缺省是原子性的。atomic
@interface XYZObject : NSObject
@property NSObject *implicitAtomObject;                  // 缺省是atomic
@property (atomic) NSObject *explicitAtomicObject;       // 指明atomic
@end
缺省訪問器已經解決了多線程并發的問題。

如果你定制了一個atomic, readwrite的屬性的setter,而讓編譯器自動生成getter,將會得到一個編譯時警告。

你可以聲明nonatomic屬性,因為不需要guarantee,處理并發,因此它的訪問器比atomic屬性更快。

屬性的原子性并不意味著對象是線程安全的。例如firstName和LastName。

管理對象的生命周期,對象是通過指針來訪問,內存是動態申請的,指針變量的生命周期不代表對象的證明周期。strong reference意味著對象和另一個對象的生命周期一樣長。
屬性缺省是強引用,可以指定weak。本地變量都是強引用,如果你不希望維護一個強引用,可以使用__weak
@property (weak) id delegate;
// ---------
NSObject * __weak weakVariable;

弱引用會帶來不安全的行為,因為變量可能會被置為nil。
一些Cocoa類不能聲明為弱引用,包括NSTextView, NSFont, NSColorSpace等,如果你需要使用這些類的一個弱引用,你需要一個unsafe_unretained聲明。
@property (unsafe_unretained) NSObject *unsafePropery;
// ------------
NSObject * __unsafe_unretained unsafeReference;
unsafe引用類似weak引用,但當對象釋放時,它不會被置為nil,因此你可能會持有一個懸掛指針,指向一個未知內存,向它發消息可能會導致崩潰。

copy屬性
@interface XYZBadgeView : NSView
@property NSString *firstName;
@peoperty NSString *lastName;
@end

如果你這樣做
NSMutableString *nameString = [NSMutableString stringWithString:@"John"];
self.badgeView.firstName = nameString;
// ----
[nameString appendString:@"ny"];
這樣firstName將指向一個NSMutableString,它的值可以改變了,你可以增加copy聲明,避免這種情況

@interface XYZbadgeView : NSView
@property (copy) NSString *firstName;
@property (copy) NSString *lastName;
@end
// --------------------
NSMutableString *nameString = [NSMutableString stringWithString:@"John"];
self.badgeView.firstName = nameString;
// ----
[nameString appendString:@"ny"];
這樣firstName仍然是“John”,不會發生變化

一個被聲明為copy的對象必須支持NSCopying協議。如果你要直接set一個copy屬性的實例變量,例如在初始化方法里,一定要設置原始對象的copy
-(id)initWithSomeOriginalString:(NSString *)aString{
  self = [super init];
  
if(self){
     _instanceVariableForCopyProperty = [aString copy];
  }
  
return self;
}


posted on 2013-11-20 16:49 cuigang 閱讀(293) 評論(0)  編輯 收藏 引用 所屬分類: OBJC

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            老司机精品久久| 亚洲电影观看| 国产精品香蕉在线观看| 亚洲激情国产| 久久夜色精品国产噜噜av| 宅男噜噜噜66一区二区66| 美日韩精品免费| 国产真实久久| 午夜精品美女久久久久av福利| 亚洲人成网站在线观看播放| 欧美一区二区精品| 国产欧美精品日韩| 午夜亚洲性色视频| 亚洲视频在线观看三级| 国产精品多人| 午夜在线a亚洲v天堂网2018| 亚洲一区二区三区免费在线观看| 欧美日韩二区三区| 在线一区二区日韩| 在线性视频日韩欧美| 欧美v日韩v国产v| 欧美成人亚洲成人| 一区二区三区视频在线观看| 亚洲国产成人av| 欧美精品一区二区三区蜜桃 | 欧美成人综合一区| 欧美综合第一页| 欧美精品国产精品| 久久精品久久99精品久久| 欧美成人a∨高清免费观看| 亚洲小说春色综合另类电影| 久久久久久久久久久久久女国产乱 | 亚洲国产美女| 一区二区三区产品免费精品久久75 | 欧美有码视频| 一区二区三区无毛| 免费一级欧美在线大片| 麻豆国产精品一区二区三区| 国产精品精品视频| 美女日韩欧美| 国产一区二区看久久| 亚洲福利一区| 一区二区欧美日韩视频| 亚洲韩国一区二区三区| 国产中文一区| 久久福利毛片| 欧美一区二区三区久久精品| 日韩视频在线你懂得| 午夜久久久久| 日韩视频三区| 亚洲人成绝费网站色www| 噜噜噜91成人网| 久久久久在线| 另类酷文…触手系列精品集v1小说| 国产精品久久91| 一区二区av| 久久精品99国产精品酒店日本| 在线亚洲国产精品网站| 国产欧美精品在线播放| 狠狠v欧美v日韩v亚洲ⅴ| 日韩视频在线观看免费| 亚洲新中文字幕| 亚洲国产欧美日韩精品| 在线视频中文亚洲| 亚洲无吗在线| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 欧美护士18xxxxhd| 国产偷国产偷亚洲高清97cao| 一区二区三区蜜桃网| 久久大综合网| 亚洲美女福利视频网站| 国产日韩一区| 小嫩嫩精品导航| 在线免费日韩片| 一区二区欧美精品| 最新成人av在线| 欧美一区二区三区免费视频| 宅男噜噜噜66国产日韩在线观看| 久久久久久香蕉网| 欧美中文字幕在线| 国产精品美女久久久浪潮软件| 亚洲日韩欧美视频一区| 最新国产の精品合集bt伙计| 午夜精品免费在线| 亚洲欧美国产一区二区三区| 欧美美女视频| 亚洲精品网站在线播放gif| 亚洲国产合集| 欧美1区3d| 欧美大胆成人| 亚洲精品免费一二三区| 久久视频在线看| 裸体女人亚洲精品一区| 国产一区二区精品| 香蕉尹人综合在线观看| 久久爱www| 国产视频久久网| 欧美在线黄色| 猛男gaygay欧美视频| 亚洲大胆av| 欧美一区二区三区婷婷月色| 国产精品久久久久久久久久尿 | 亚洲一二三区精品| 午夜精品一区二区三区电影天堂| 欧美视频在线观看免费| 在线一区观看| 欧美有码视频| 伊人久久综合97精品| 玖玖精品视频| 亚洲国产一区二区视频| 中文精品一区二区三区| 美女视频网站黄色亚洲| 久久久噜噜噜久久狠狠50岁| 久久偷窥视频| 亚洲国产日韩在线| 亚洲精品乱码久久久久久| 最新国产精品拍自在线播放| 在线中文字幕不卡| 亚洲一级影院| 久久av二区| 欧美四级伦理在线| 亚洲精品视频一区二区三区| 久久精品国产亚洲5555| 亚洲第一福利在线观看| 99国产精品自拍| 国产精品视频免费观看www| 欧美一区二区成人| 亚洲黄色在线看| 亚洲欧美日韩一区二区三区在线观看| 国产精品女主播| 久久婷婷久久| 亚洲精品在线一区二区| 久久精品一级爱片| 夜夜躁日日躁狠狠久久88av| 国产精品尤物| 欧美成人有码| 亚洲欧美日韩爽爽影院| 欧美激情欧美狂野欧美精品 | 亚洲国产成人久久综合一区| 亚洲欧美在线播放| 亚洲日本成人网| 国产日韩精品视频一区| 欧美精品一区二区三| 久久se精品一区二区| 在线一区二区三区做爰视频网站| 欧美成人激情在线| 亚洲欧美在线aaa| 日韩视频一区二区| 激情自拍一区| 国产日韩欧美精品综合| 欧美国产一区二区在线观看| 性欧美videos另类喷潮| 日韩视频精品在线观看| 麻豆av一区二区三区久久| 亚洲视频在线观看一区| 亚洲国产精品一区制服丝袜| 国产欧美视频一区二区三区| 欧美日本在线| 美国成人毛片| 久久精品网址| 亚洲欧美激情诱惑| 中国成人黄色视屏| 亚洲精品欧美| 亚洲国产影院| 欧美黄色免费网站| 久久在线视频| 久久久久免费观看| 欧美一级片一区| 亚洲尤物在线| 亚洲午夜精品一区二区三区他趣| 最新中文字幕一区二区三区| 黄色小说综合网站| 国产午夜精品理论片a级大结局| 国产精品久久久久久模特| 欧美手机在线| 国产精品久久久久久亚洲毛片| 欧美调教vk| 国产精品乱码一区二三区小蝌蚪 | 亚洲精品一线二线三线无人区| 韩日午夜在线资源一区二区| 国产精品视频久久久| 国产精品欧美日韩| 国产精品视频成人| 国产一区在线免费观看| 国产亚洲一区二区三区| 国产亚洲精品成人av久久ww| 国产欧美一区二区在线观看| 国产精品伊人日日| 国产亚洲精久久久久久| 在线激情影院一区| 一区二区三区在线观看国产| 在线观看av一区| 亚洲欧洲在线视频| 99精品视频免费观看| 妖精成人www高清在线观看| 亚洲影院色无极综合| 久久gogo国模啪啪人体图| 免费成人网www| 亚洲激情二区| 一区二区三区高清在线观看|