標籤:
點文法
點文法的本質是方法調用
成員變數的範圍
@public : 在任何地方都能直接存取對象的成員變數
@private : 只能在當前類的對象方法中直接存取(@implementation中預設是@private)
子類如果想訪問通過setter getter方法訪問
@protected : 可以在當前類及其子類的對象方法中直接存取
(@interface中預設是@protected)
@package : 只要處在同一個架構中,就能直接存取對象的成員變數
一般用不到,直接用系統內建架構
@interface和@implementation中不能聲明同名的成員變數
在@implementation中也能寫成員變數,不用聲明,可直接寫set get方法
@implementation Class : NSObject
{
int _a;// 預設是私人
}
- (void)setA:(int)a
{
_a = a;
}
-(int)a
{
return _a;
}
@end
@property 可以自動產生某個成員變數的setter和getter的聲明
例
@interface Class : NSObject
{
int _a;
double _b;
}
@property int a;
@property double b;
@end
@synthesize:自動產生a的setter和getter的實現並且訪問_a這個成員變數
會訪問_a這個成員變數,如果這個成員變數不存在,就自動產生@private類型的_a變數
例
@implementation Class
@synthesize a = _a;
@synthesize b = _b;
@end
Xcode 4.4版本後,@property就獨攬了@synthesize功能,就是說@property可以同時聲成setter和getter的聲明和實現
預設情況下 setter 和getter方法的實現,會訪問底線_開頭的成員變數
id類型
id:萬能指標,能指向/操作任何OC對象 id ==NSObject *
注意id後面不要加*
構造方法:用來初始化對象的方法,是個對象方法
重寫構造方法目的:讓建立出來的對象裡的成員變數有一些固定的值
重寫init方法:
// 1.一定要調用super的init方法:初始化父類中聲明的一些成員變數和其他屬性
例 - (id)init
{
self = [super init]; // 當前對象 self
// 2.如果對象初始化成功,才有必要進行接下來的初始化
if (self != nil)
{
_age = 10;
}
return self;
}
在@implementaion 類名
- (id)init
{
if (self = [super init])
{
_age = 10;
}
return self
}
@end中重寫
自訂構造方法:
規範:
1.一定是對象方法,一定以 _ 開頭
2.傳回值id類型
3.方法名以initWith開頭
1.聲明在@interface 中 @end上面
例 @interface Person :NSObject
@property NSString *_name;
- (id)initWithName:(NSString *)name;
@end
2.實現在@implementation 中 @end 上面
例 @implementation Person
- (id)initWithName:(NSString *)name
{
if (self = [super init])
{
_name = name;
}
return self;
}
@end
main.m檔案中:
int main()
{
Person *p = [[Person alloc] initWithName:@"rose"]
return 0;
}
Objective-C( 文法一)