1.NSString:OC字符串的输出。占位符是%@
在OC语言中不要再用 char *name;来表示字符串
改为NSString *_name;
C语言中的sizeof时计算字符串的长度,而OC中length是计算有多少个字所以比较适用与开发中的需求
创建OC字符串的另一种方式
NSString *newStr = [NSString stringWithFormat:@"My age is %d and no is %d and name is %@",age,no,name];
判断点是什么方法由有没有赋值决定有赋值就是set方法,调用则是get
点方法的本质还是方法调用
当使用点语法时,编译器会自动展开成相应的方法
p.age =10; // = [p setAge:10];
死循环:
- (int)age
{
NSLog(@"age");
return_age;// ->age;
//会引发死循环
// return self.age;// [self age];
}
3.成员变量的作用域
@public:在任何地方都能直接访问对象的成员变量
@private:只能在当前类的对象方法中直接访问
直接访问就是通过变量名来访问而不是通过get和set方法
@protected:可以在当前类及其子类的对象方法中直接访问(默认就是@protected)
@package:只要处在同一个框架中,就能直接访问对象的成员变量
@property:*可以自动生成某个成员变量的setter和getter声明
*甚至可以同时做三件事情:1生成setter和getter的声明,2生成setter和getter的实现,生成相应的成员变量
*用在@interface中
*用@property int age;就可以代替一下两行
- (int)age; //getter
-(void)setAge:(int)age;//setter
@synthsize:*可以自动生成某个成员变量的setter和getter的实现
*用在@implementation中- (void)setAge:(int)age{
_age = age;
}
@synthesize的细节
>@synthesize age = _age;
setter和getter实现中会访问成员变量_age
如果成员变量_age不存在,就会自动生成一个@private的成员变量
>@synthesize age;
setter和getter实现中会访问成员变量age
如果成员变量age不存在,就会自动生成一个@private的成员变量age
>手动实现
若手动实现了setter方法,编译器就只会自动生成getter方法
若手动实现了getter方法,编译器就只会自动生成setter方法
若同时手动实现setter和getter方法,编译器就不会自动生成不存在的成员变量
5.id
简介:1>万能指针,能指向任何OC对象,相当于NSObject *
2>id类型的定义
typedef struct objc object{
Class isa;
}*id;
使用
注意:id后面不要加*
id p=[Person new];
局限性
调用一个不存在的方法,编译器会马上报错