一:點語法框架
1>用點語法替換set方法和get方法編輯器
2>點語法的本質spa
**其實點語法的本質仍是方法調用.net
**當使用點語法時,編譯器會自動展開成相應的方法指針
3>死循環注意code
二:成員變量的做用域對象
局部變量,全局變量都有本身的做用域。成員變量也有本身的做用域。blog
1>做用域類型ip
1.@private:只能在當前類的對象方法中直接訪問作用域
(能夠用get方法、set方法訪問);
(在@implementation中聲明的對象默認爲@private,@public無效)
2.@protect:只能在當前類和子類的對象方法中直接訪問
(在@interface中若是不加做用域類型,默認爲@protect)
3.@public:任何地方均可以直接訪問成員變量
4.@package:同一個「體系內」(框架)能夠訪問,介於@private和@public之間。
(只要處在同一個框架中,就能直接訪問對象的成員變量。)
注意:沒有@interface,只有@implementation,也能夠開發一個類。
@implementaion中不能定義和@interface中同名的成員變量。
三:編輯器特性:@property和@synthesize
1> @property
用在@interface中,能夠自動生成成員變量的setter和getter聲明;
2>@synthesize
用在@implementation 中,能夠自動生成成員變量的set和get方法的實現。
@synthesize age = _age;
1.setter和getter實現中會訪問成員變量_age
2.若是成員變量_age不存在,就會自動生成一個@private的成員變量_age
@synthesize age;
1.setter和getter實現中會訪問成員變量age
2.若是成員變量age不存在,就會自動生成一個@private的成員變量age
手動實現
1.若手動實現了setter方法,編譯器就只會自動生成getter方法
2.若手動實現了getter方法,編譯器就只會自動生成setter方法
3.若同時手動實現了setter和getter方法,編譯器就不會自動生成不存在的成員變量
4> @property新特性自從Xcode 4.x後,@property就獨攬了@synthesize的功能。也就是說,@property能夠同時生成setter和getter的聲明和實現
默認狀況下,setter和getter方法中的實現,會去訪問下劃線 _ 開頭的成員變量
因此在如今的Xcode版本下,能夠最大化的簡潔書寫。id類型的定義
typedefstruct objc_object {
Class isa;
} *id;
注:id類型後面不能加*;
NSString *_name;
->id _name;
五:構造方法
1>對象建立兩部曲
[person new] 這裏面的new完整的建立了一個可用的對象
1.分配存儲空間 (類方法) +alloc
2.初始化 (對象方法)-init
// 調用+alloc 分配存儲空間
Person *p1 = [Person alloc];
// 調用- init進行初始化
Person *p2 = [P1 init];
以上兩步能夠濃縮爲一步
Person *p3 = [[person alloc] init];
-init方法就是構造方法
2>構造方法
構造方法就是用來初始化對象的方法,是個對象方法。以‘-’開頭。
初始化對象原理:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// 每一個Person對象建立出來,他的成員變量_age值爲10
// -init進行初始化,重寫-init方法,定義_age值,在@implementation中實現
- (id)init // 不肯定init類型,因此用萬能類型
{
// 1.必定要調用回super(父類)的init方法:初始化父類中聲明的一些成員變量和其餘屬性
self = [super init]; //當前對象self
// 2.若是對象初始化成功,纔有必要進行接下來的初始化
if(self != nil) // 當前不爲空
{
// 初始化成功
_age = 10;
}
// 3.返回一個已經初始化完畢的對象
return self;
}
|
重寫構造方法的注意點:
1.先調用父類的構造方法[super init]
2.再進行子類內部成員變量的初始化。