OC 对象调用属性或实例变量或方法的细节。
2015-12-05 13:59
489 查看
1.成员变量可以理解为所有在类的头上声明的,无论是@interface、@implementation下用大括号括起来或者是用@property声明的变量都可以称作这个类的成员变量,只是在@implementation下声明的变量是这个类的私有变量,外部无法访问的,而在@interface下声明的变量可设定为全局或者私有变量,而用 @property声明的就是全局变量,是外部既可以访问,内部也可以调用的 2.首先确定一下,对象.xxx的语法后跟的不是成员变量,是一个可以被访问的方法名,之所以让你感觉"对象.成员"便令这种方式调用,是因为用 @property定义或者手动设置了这个变量的setter和getter方法的方法名和成员变量一样,实际调用的是方法;(照我说说改一改你的程序,看看) [对象方法]才是OC中标准的调用方法的语法方式,这种方式的原理是向该对象中发送一个消息,如果对象中有相应的消息就会做出回应,这就是OC的 消息机制,目前最常用的也是这一种表示形式 总结:对象.方法==[对象方法](只有在方法名为setter/getter情况下,相等)没有对象.属性和对象.成员变量 如果要用对象访问成员变量可以用对象->属性 ps:1.@propertyNSString*name; 在implementation中 self.name=@"字符串";//可以赋值 NSLog(@"%@",self.name);//可以取值
在主函数中 对象.name=@"字符串";//可以赋值 NSLog(@"%@",对象.name);//可以取值
2. { NSString*name; } -(void)setname:(NSString*)n { self.name=n;//不报错,但不可以赋值因为这个会产生死循环(self.name=n相当于[selfsetname:n])这就形成了循环调用问题 self->name=n;//可以赋值 name=n; } -(NSString*)name { returnname; }
在主函数中 对象.name=@"字符串";//可以赋值 NSLog(@"%@",对象.name);//可以取值
3. { NSString*name; } -(void)setName:(NSString*)n { self.name=n;//不可以赋值错误提示:Nosettermethod'setname':forassignmenttoproperty name=n;//可以赋值 } -(NSString*)name { returnname; }
在主函数中 对象.name=@"字符串";//不可以赋值 对象setName:@"字符串"//可以赋值 NSLog(@"%@",对象.name);//可以取值
3.类方法的意思是不需要声明一个对象(实例)就可以直接调用的方法,通常是有返回值的(否则类方法就无意义了,因为没有对象或者相应的成员变量的值可以设置)。作用就是返回一些这个类特定的实例,比如字符串的[NSStringstringWithFormat:@""];这个类方法,作用就是返回一串自定义的字符串,用法和[NSStringalloc]initWithFormat:@""];没有区别 但是,实际上用类方法创建的对象是被系统自动归到自动释池下管理的,而用alloc方法创建的对象如果在手动内存管理模式下,需要用release方法进行释放,这就是两者的区别了
相关文章推荐
- Java多线程
- 利用struts进行图片上传
- [Kerberos] Kerberos 认证过程整理
- 删除链表中重复元素
- Apache 下SVN项目管理使用说明
- [深入浅出Windows 10]不同平台设备的适配
- 【XML解析(二)】DOM解析XML
- C++创建随机不重复的数字
- 二叉树的的所有操作——转化为静态二叉链表,求深度,求先序排列,求中序排列,求后序排列,求层次遍历,求度为0.1.2的节点个数
- GCC编译器选项及优化提示
- jQuery-1.9.1源码分析系列完毕目录整理
- 黑马程序员---IO4(IO其他类、编码表)
- 黑马程序员——Foundation框架——常用结构体
- 读写分离,读写分离死锁解决方案,事务发布死锁解决方案,发布订阅死锁解决方案
- 歌华遥控器同步电视遥控器功能(学习)
- 分享
- jQuery-1.9.1源码分析系列完毕目录整理
- Single Number III
- css3和html5的基础
- MCMC与Gibbs Sampling