有点愧疚,这几个月荒废了,也浪费了很多时间。
接下来是我看的关于核心语法的一些笔记,可能不全也可能有错误,希望大家可以指出来。
一、点语法
点语法的本质是调用。
例如:
Person *p = [Person new];
//赋值
p.age = 10; // 等价于[P setAge:10];调用setter
//取值
int a = p.age;// 等价于[P age];调用getter
二、成员变量的作用域
@public 任何地方都能直接访问
@private 只能在当前类的对象方法中直接访问
@protect 当前类和子类的对象方法。虽然被保护,但是在内存中子类拥有父类中的方法
三、@property和@synthesiz
1.自动生成 _age.
2.自动生成_age的setter和getter声明
@property int age;//写上类型和名称
/*等价于
-(void)setAge:(int)age;
-(int)age;*/
//表示字符串
@property NSString*name;
生成setter 和getter方法的实现
@synthesize age = _age;
还可以连着写
@synthesize age =_age,name = _name;
注:
一般情况下省略@synthesize,只写@property
并且会自动生成setter和getter的声明和实现。
四、万能指针 id
id 是一种指针,一般形式为
id = NSObject*
id d = [Person new]
五、构造方法
属于对象方法,减号开头。
new 完整的创建一个可用的对象
① 分配存储空间 ② 初始化
不再使用new创建对象。改为以下方式
1.调用+alloc 分配存储空间
2.调用-init进行初始化
Person *p = [[Person alloc] init];
六、重写构造方法
目的:为了让对象创建出来,成员变量就会有一些固定的值
*****重写-init 方法*****
-(id)init //id是为了使任何对象都可以调用NSObject
{
//一定要调用回super 的init 方法,初始化父类中声明的成员变量和其他属性
if (self = [super init]
//如果对象初始化成功,才能进行下面的初始化
{_age = 10;//所有成员变量初始化值都是10
}
return self;//返回一个已经初始化完毕的对象
}
七、自定义构造方法
自定义构造方法:
1.一定是对象方法,一定以减号开头
2.返回值一定是id类型
3.方法名以initWith开头
例如
@interface Person:NSObject
@property NSString *name;
@property int *age;
-(id) initWithName:(NSString*)name andAge:(int)age;
@implementation Person
-(id)initWithName:(NSString*)name andAge:(int)age;
{if(self=[super init])
{_name=name;
_age=age;
}
return self;
}
int main()
{Person *p = [[Person alloc] initWithName:@"rose"andAge:30]
return 0;
}
八、类的本质
//利用Person这个类创建Person类型的对象
Person *p = [[Person alloc] init];
//获取内存中的类对象,即Person这个类对象
Class c = [p class];
也可以写成Class c = [Person class];
注:
类本身也是一个对象,是个class类型的对象,简称类对象,
利用class创建Person类对象
利用person创建Person类型的对象