一、点语法
点语法的本质其实就是调用类的set 和 get 方法,具体例子如下:
//
// Person.h
// OC核心语法
//
// Created by LPMac on 14-5-30.
// Copyright (c) 2014年 itcast. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
int _age;
}
- (void)setAge:(int)age;
- (int)age;
@end
//
// Person.m
// OC核心语法
//
// Created by LPMac on 14-5-30.
// Copyright (c) 2014年 itcast. All rights reserved.
//
#import "Person.h"
@implementation Person
- (void)setAge:(int)age
{
_age = age;
}
- (int)age
{
return _age;
}
@end
//
// main.m
// OC核心语法
//
// Created by LPMac on 14-5-30.
// Copyright (c) 2014年 itcast. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Person *p = [Person new];
// insert code here...
p.age = 10; //相当于调用 [p setAge];
int a = p.age; //相当于调用 [p age];
NSLog(@"a的值是:%d",a);
}
return 0;
}
二、@property 和 @synthesize的使用
1.@property 是用来自动生成某个成员变量的setter 和 getter 声明 @synthesize 实现成员变量的 getter 和 setter 方法
//
// Person.h
// OC核心语法
//
// Created by LPMac on 14-5-30.
// Copyright (c) 2014年 itcast. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
int _age;
NSString *_name;
}
//@property 自动生成成员变量的getter 和 setter 方法的声明
@property int age;
@property NSString *name;
@end
//
// Person.m
// OC核心语法
//
// Created by LPMac on 14-5-30.
// Copyright (c) 2014年 itcast. All rights reserved.
//
#import "Person.h"
@implementation Person
//@synthesize 实现成员变量的 getter 和 setter 方法的实现
//@synthesize age = _age;
//@synthesize name = _name;
//精简写法
@synthesize age = _age, name = _name;
@end
三、构造函数
1. 构造函数的使用
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
// Person *p = [Person new];
//创建对象的正式写法 ,+alloc 用来分配存储空间, -init 用来初始化,即构造方法
Person *p = [[Person alloc]init];
//id 类型是指向所有对象的指针 ,相当于NSString *
id d = [Person new];
// insert code here...
p.age = 10; //相当于调用 [p setAge];
int a = p.age; //相当于调用 [p age];
NSLog(@"a的值是:%d",a);
}
return 0;
}
2.构造函数的重写
构造函数的重写,要在类的实现中重写- init 方法,重写构造方法,可以给成员变量初始化为固定的值
重写构造方法和自定义构造方法的具体实现见以下示例
//
// Person.h
// OC核心语法
//
// Created by LPMac on 14-5-30.
// Copyright (c) 2014年 itcast. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
int _age;
NSString *_name;
}
//@property 自动生成成员变量的getter 和 setter 方法的声明
@property int age;
@property NSString *name;
//自定义构造方法的声明
- (id)initWithAge:(int)age andName:(NSString *)name;
@end
//
// Person.m
// OC核心语法
//
// Created by LPMac on 14-5-30.
// Copyright (c) 2014年 itcast. All rights reserved.
//
#import "Person.h"
@implementation Person
//@synthesize 实现成员变量的 getter 和 setter 方法的实现
//@synthesize age = _age;
//@synthesize name = _name;
//精简写法
@synthesize age = _age, name = _name;
//重写init构造方法
- (id)init
{
//必须调用父类的init方法,初始化父类的成员变量和属性
if(self = [super init])
{
//初始化成功
_age = 5;
}
return self;
}
//自定义的构造方法的实现,自定义构造方法返回值是 id ,方法名以 init开头
- (id)initWithAge:(int)age andName:(NSString *)name
{
if(self = [super init])
{
_age = age;
_name = name;
}
return self;
}
@end
// main.m
// OC核心语法
//
// Created by LPMac on 14-5-30.
// Copyright (c) 2014年 itcast. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Person *p1 = [[Person alloc]initWithAge:33 andName:@"jack"];
NSLog(@"年龄是:%d,名字是:%@",p1.age,p1.name);
}
return 0;
}