---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
一、OC语法
1、成员变量作用域
1>概念:可以在成员变量前加以下四种关键字修饰其作用域
①@public :在任何地方都能直接访问对象的成员变量
②@private : 只能在当前类的对象方法中直接访问(@implementation中默认是@private)
③@protected : 可以在当前类及其子类的对象方法中直接访问 (@interface中默认就是@protected)
④@package :只要处在同一个框架中,就能直接访问对象的成员变量
2>注意点
①@interface和@implementation中不能声明同名的成员变量
2、property和synthesize
1>概念及使用方法
property:可以自动生成成员变量set和get方法的声明
@interface Person : NSObject
{
int _age;
}
@property int age; // 这一行等价于下面注释的两行
//- (void)setAge:(int)age;
//- (int)age;
#import "Person.h"
@implementation Person
@synthesize age = _age; //这一行等于下面注释的8行
//- (void)setAge:(int)age
//{
// _age = age;
//}
//- (int)age
//{
// return _age;
//}
@end
2>注意点
①synthesize定义的变量类型等于@property同名变量的类型
②如果按下面方式使用synthesize,则会访问age而不是_age
synthesize age;
③在xcode4.4之后,@property包含了@synthesize的功能,我们使用新版本xcode只需写下面一行代码即可
@property int age;
④xcode只会帮你生成你没有写的方法,如果你写了,会采用你的方法。(如果你写了setter和getter的实现,那么xcode不会自动生成变量)
3、点语法
1>概念
点语法的本质就是调用setter和getter
p.age = 10; // [p setAge:10];
int age = p.age; // [p age];
代码和注释是相同的。
2>注意点
不要在方法内部使用点语法调用方法本身,这样会引发死循环
- (void)setAge:(int)age
{
self.age = age;
}
- (int)age
{
return self.age;
}
4.id类型
id是万能指针,可以指向或操作任何OC对象
id d = [[Person alloc]init];
[d setAge:10];
[d setObj:@"321423432"];
NSLog(@"%d", [d age]);
1>概念
用来初始化对象的方法,使对象一创建出来成员变量就有一些我们想要的值。
2>使用方法
- (id)init
{
if ( self = [super init] )
{ // 初始化成功
_age = 10;
}
// 3.返回一个已经初始化完毕的对象
return self;
}
int main()
{
Person *p = [[Person alloc] init];
}
这样创建出来的Person对象的年龄都是10
3>注意点
①在写构造方法时,一定先调用父类的构造方法,确认成功调用后再进行类的初始化,最后返回初始化完毕的对象
②构造方法是一个对象方法,要以“-”开头
③self =[super init]是一个固定写法
④构造方法命名一般以initWith开头,返回值为id类型
6.注释
pragma是xcode一个特有注释方法
用#pragma - 来区分不同类型的方法
用#pragma来注释方法
#pragma mark - 姓名的seter和getter
#pragma mark 姓名的set方法
- (void)setName:(NSString *)name
{
_name = name;
}
#pragma mark 姓名的get方法
- (NSString *)name
{
return _name;
}
#pragma mark - 其他方法
- (void)test
{
}