黑马程序员----OC基础--核心语法、关键字

点语法:                                                                                                              

用途:

OC当中通过@property和 @synthesize 配对使用来自动生成变量的set和get方法,通过使用点语法可以大大减少我们程序员代码量,也方便学习过其他语言的人上手OC语言

简而言之:

1.减少代码量

2.方便其他语言使用者阅读

用法:

[cpp]  view plain copy
  1. #import <Foundation/Foundation.h>  
  2. #import "Person.h"  
  3. int main(int argc, const char * argv[])  
  4. {  
  5.     Person *p = [Person new];  
  6. //   [p setAge:10];      //用点语法代替就是                p.age = 10;  
  7. //   int a = [p age];    //用点语法代替就是                int a = p.age;  
  8.   
  9.     NSLog(@"Age is %d",a);  
  10.     return 0;  
  11. }  

编译器遇到点语法时,会自动展开成其相应的方法

@property                                                                                                          

@property可以自动生成某个成员变量的settergetter声明,但是.h文件中还是要写实现

比如:

.h文件中

[cpp]  view plain copy
  1. @property int  age;   // 这行可以代替下面两行  
  2. // -(void) setAge:(int)age;  
  3. // -(int)age;  

@synthesize                                                                                                       

@synthesize可以在.m文件中自动生成settergetter的实现,并且会访问该成员变量

比如:

[cpp]  view plain copy
  1. @synthesize int age = _age;  // 等号左边的age是@synthesize要实现的变量名  
  2.                             //  右边的_age是@synthesize要返回的变量名,就是要赋值的变量  

如果@synthesize定义一个未知的变量,那么这个变量的默认就是@private类型的

Xcode4.4以后,其实只需要用@property这个关键字就行了,它会自动生成成员变量,会声明和实现getter和setter方法

其缺陷是自动生成的成员变量是@private,子类只能通过getersetter方法访问,但是可以手动改变成员变量的作用域

description                                                                                                          

description默认返回的是 <类名:内存地址>

[cpp]  view plain copy
  1. #import <Foundation/Foundation.h>  
  2. #import "Person.h"  
  3. int main()  
  4. {  
  5.     Person *p = [[Person alloc] init];  
  6.     p.age = 20;  
  7.     p.name = @"jack";  
  8.     NSLog(@"%@",p);  
  9. return 0;  
  10. }  

此时输出的结果就是person:内存地址

因为Nslog(@"%@",p);这句会调用pdescription方法,而方法默认返回的就是 <类名:内存地址>,所以想要返回自己想要的结果,可以在.m文件中修改description方法的返回值

[cpp]  view plain copy
  1. #import "Person.h"  
  2. @implementation Person  
  3. - (NSString *)description  
  4. {  
  5.     return [NSString stringWithFormat:@"%d,%@",_age,_name];  
  6. }  
  7. @end  

此时NSlog输出的就是年龄和名字了

SEL   

每个方法都有一个和他相对应的SEL数据,每个SEL数据都相对应着这个方法的地址

也可以理解为SEL就是对方法的一种包装,将方法包装成一个SEL类型的数据,去找对应的方法地址,找到方法地址就可以调用方法

方法调用的过程:

当调用方法的时候,编译器会把方法包装成SEL类型的数据,然后去类里找这个SEL数据相对应的方法的地址,找到之后就会调用这个方法

以上操作是有缓存的

其实调用方法还可以用SEL数据来调用

[cpp]  view plain copy
  1. [p performSelector:@selector(test)]; // 效果和[p test];一样  

带参数的方法调用:

[cpp]  view plain copy
  1. [p performSelector:@selector(test3:) withObject:@"hhe"];  

 在一个方法中用如下使用selfSEL数据,会引发死循环

[cpp]  view plain copy
  1. [self performSelector:_cmd];  

NSLog输出补充                                                                                                    

[cpp]  view plain copy
  1.     // 指针变量地址  
  2.     NSLog(@"%p",&p);  
  3.     // 对象地址  
  4.     NSLog(@"%p",p);  
  5.     // <类名:对象地址>  
  6.     NSLog(@"%@",p);  

NSLog输出C语言字符的时候 不允许有中文

NSLog(@"%s",str);


id                                                                                                                        

id是一种数据类型,被叫做万能指针,可以操作任何OC对象,因为id这个类型已经被写入了”*“,所以不用再加上星号

sample code:

[cpp]  view plain copy
  1. int main()  
  2. {  
  3.    //Person *p = [Person new];  
  4.    //只适用OC对象  
  5.      
  6.     id person = [Person new];  
  7.     [person setAge:10];  
  8.     NSLog(@"age=%d",[person age]);  
  9.     return 0;  
  10. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值