您的位置:首页 > 运维架构

OC_NSString,点语法,成员变量作用域,@property和@synthesize,id笔记

2014-06-09 15:09 204 查看
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];
NSLog(@"___%ld",[newStr
length]);

2.点语法
代替setter和getter的调用语法

判断点是什么方法由有没有赋值决定有赋值就是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:只要处在同一个框架中,就能直接访问对象的成员变量

4.@property和@synthesize

@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中
    *用@synthesize age = _age;就可以代替
- (int)age{
return _age;
}

      - (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];

 
 局限性
 调用一个不存在的方法,编译器会马上报错
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐