点语法 @property语法 id指针
来源:互联网 发布:端口监听命令 编辑:程序博客网 时间:2024/05/18 01:48
IOS学习第22天
点语法
1.点语法: 相当于调用方法. 对象名.name = @"xxx"; //相当于 [对象名 setName:@"xxx"] 对象名.age = 19; //相当于 [对象名 setAge:19]; 对象名.xxx = @"20"; //相当于 [对象名 setXxx:@"20"]; NSString * name = [对象名 name]; NSString * name1 = 对象名.name;总结:点语法的使用 如果点语法出现在赋值号左边,相当于赋值 那么这个语法就是调用了对象的 setXXX方法 1>点语法使用在赋值符号的左边 对象.xxx = 值 -----> [对象 setXxx:值]; 如果点语法出现在等号右边 那么相当于取值 这个点语法就是调用了对象的getter方法//getter方法不是已get开头 当点语法单独使用的时候,一般都是取值 2>点语法使用在赋值符号的右边 变量 = 对象.xxx -----> [对象 xxx];注意:我们写的代码中 点语法 只操作属性 注意作用就是 给对象的属性赋值的时候 可以省略一些代码点语法的注意事项:1.点语法 是xcode的特性,在编译之前,xocde会把点语法替换成对象的方法2.对象.name = @"zhangsan"====>[对象 setName:@"zhangsan"]; 所以说 在使用点语法之前 必须有对象方法 ```###@property和@synthesize的使用* @property
1.在xcode4.4之前 @property 在.h使用
作用:自动生成setter和getter方法的声明
“格式:@property 数据类型(和属性相同) 去掉下划线的属性名
注意:”单独”使用@property的时候 他只会自动生成setter和getter方法的声明
1.格式 (在xcode4.4之后)
@property 数据类型 去掉下划线的属性
1>自动生成属性的getter和setter方法的声明(.h中)2>自动生成属性的getter和setter方法的实现(.m中)3>不会生成不带下划线,而会生成带有下划线的(如果不存在)4>在getter和setter方法的实现中 操作的就是带有下划线的属性
2.在xcode4.4之后 要给类添加一个属性
一部操作:在.h中 @property 数据类型 不带下划线的属性名
pragma mark - 11 使用@property增强注意 [掌握]
1.@property 数据类型 去掉下滑线的属性名
会生成带有下划线的属性,而且这个属性是真私有属性
2.@property 自动生成的getter和setter方法的实现中,在setter方法中是直接赋值的,
在getter方法中是直接返回
如果你自己需要在getter方法或者setter方法中做一些逻辑判断
只要在.m自己去实现,自己实现的方法 @property不会再帮你生成了
注意:如果你同时自己实现了getter和setter,那么@property 不会帮你生成带有下划线的私有属性 那必须自己在.m中添加一个带有下划线的属性 ```
- synthesize
1.在xcode4.4之前,@synthesize 在.m使用 作用:自动生成setter和getter方法的实现 "格式:@synthesize 去掉下划线的属性名注意: 在xcode4.4之前,@property 和@synthesize "配合"使用的时候 不仅可以自动生成getter和setter方法的声明,还可以自动生成getter和setter方法的实现 还可以自动生成对象的属性 "但是这个属性的名字 是不带下划线2.注意:[xcode4.4之前] 1>@property 和@synthesize一起使用的时候 可以自动生成属性 ,但是这个属性是不带下划线的 2>在.h中 我们不去掉属性,也会自动生成一个不带下划线的属性 3.默认@synthesize 实现中 给自己生成的那个不带下划线的属性赋值的 4.做一个操作,目的是告诉@synthesize 第一你别给我生成不带下划线 第二:你给我操作 我那个带有下划线 "格式@synthesize 去掉下划线的属性名 = _属性名 1>不会生成不带有下划线的属性 2>操作的就是我们写的那个带有下划线的属性 ```###任意指针可以指向任意的对象
1.OC是一门弱语法的语言
编译器对源代码容错性较强,一些明显的逻辑性错误只是报警告,并不报错
2.弱语言的缺点
如果有逻辑错误编译的时候可以通过,但是直到运行的时候才会把错误暴露出来,导致程序崩溃
3.动态类型和静态类型
1>静态类型:什么样的指针就指向了什么样的对象
2>动态类型:指针的类型和指针指向的真实类型不一致
###编译检查 运行检查
1.什么时编译检查?
编译检查:程序运行之前的检查.就看这个指针定义时候的类型是否拥有某个方法
2.什么是运行检查?
运行检查:程序运行过程中检查,就看这个指针对象的类型是否拥有某个方法
口诀:
编译时看左边,运行时看右边
NSString * str = [Dog new];//不会报错,OC弱语法
调用方法:
[str eat];//编译的时候报错
[str length];//编译的时候不会报错,运行时报错[(Dog *)str eat];//编译的时候 不会报错,运行时也不会报错
报错信息:
reason: ‘-[Dog miaomiao]: unrecognized selector sent to instance 0x100501430’
这种信息通常表示 运行时对象没有 上面说的那个”miaomiao”方法
编译的时候 编译器说了算
运行的时候 运行时说了算
###NSObject万能指针和id指针
.NSObject 指针 是一个万能指针
可以指向任何对象,编译不会报错(因为OC是弱语法) 也不会警告(里氏替换原则)
#import "HMPerson.h" //HMPerson类中有一个方法 叫做 - lenght@interface HMPerson : NSObject@property NSString * name;- (NSUInterger)length;@end@implementation HMPerson- (NSUInterger)length{ return 10;}@endint main(int argc, const char * argv[]) { NSObject *obj = @"1234";//万能指针 指向了一个 OC字符串对象// [obj length];报错 因为编译时只看指针的类型,没有lenght方法 所以报错 unsigned long len = [(HMPerson *)obj length]; NSLog(@"%lu",len);//编译直接报错 解决[(NSString *)obj length] return 0;}
“NSObject * 指针有一个缺点
NSObject * 指针指向了一个自己定义的对象的时候,想通过这个指针调用自己定义的对象的方法时必须强转,避免编译器报错
1.id类型 是一个typedef过的指针类型
所以声明 id变量的时候不需要加”*”
2id 和 NSObject *都是万能指针,他们的区别在于
指针类型是NSObject * 那么编译时会做编译检测
id指针 那么编译直接通过
3.id指针的优缺点
优点:不做任何的编译检查
缺点:不做任何的编译检查
不能通过id指针使用点语法,但是可以直接调用getter和setter方法
“`
- 点语法 @property语法 id指针
- 属性,Property,点语法
- @property 和 点语法
- OC基础——点语法、@property、id、构造方法
- OC核心语法(1)点语法、变量作用域、@property@synthesize和id
- OC点语法、@property、@synthesize
- iOS点语法@property属性
- OC特有语法1—点语法,成员变量作用域,@property,id,构造方法,多文件编程
- OC特有语法1—点语法,成员变量作用域,@property,id,构造方法,多文件编程
- OC_NSString,点语法,成员变量作用域,@property和@synthesize,id笔记
- 黑马程序员-点语法,成员变量作用域,@property,@synthsize和 id
- 黑马程序员——Objective-C学习之@property @synthesize和id及点语法
- Objective-C—self 、super、点语法、成员变量的作用域、@property和@synthesize、id
- OC中的点语法,成员变量,@property和@synthesize:id类型,构造函数
- oc点语法和@property @synthesize
- @property、@synthesize关键字和点语法
- OC学习之@property和点语法
- ObjectC----Property,Attribute,点语法,KVC,KVO
- Xcode '*/*.h' file not found 此类问题解决方案
- open系统调用
- 封锁阳光大学
- 选择器
- elasticsearch 2.3.4中文分词插件ik 1.9.4安装
- 点语法 @property语法 id指针
- HDU 1711 Number Sequence
- [Sencha Test] 3、入门
- from 是sqlite的关键字,不能用作字段,否则报错
- 历代的国歌
- 欺负越南人的故事
- Maven本地手动安装jar
- 我的故事
- nginx缓存cache的几种方式