oc总结第四讲:属性

一、学习属性我们首先要对属性有一个清晰地认识,什么是属性?属性和我们熟知的实例变量有用什么区别呢??

实例变量和属性是一个包含关系,实例变量中包含属性,而属性是作为实例变量的子集
     这种情况是需要为您举例子的,比如 汽车 是一个类(一个集合)
      1.您指出了一辆特定的车(请注意,这里是指的单个的一辆车),那么这辆车属于 汽车 这个类,这辆车您就可以理解为是汽车这个类的实例变量(指出了一个例子,实例也可以叫做 对象 )
      2.而您可以看到这辆车的颜色、车轮、发动机等等的车身上的部件,我们就可以称这些部件为 属性。
      3.而汽车是如何发动的,如何跑的,关于这些 我们可以称作它们是这辆车的方法,当然所有的车都可以发动,都可以跑,所以这些方法也是属于汽车的这个类(集合的)
      如果用程序的角度编写的话,比如您设置了一个父类是NSObject的自定义类,就叫做Car
那么这个Car中,您可以通过在头文件用@property或者大括号‘{}‘直接声明一些变量,比如颜色、厂家等等,这些用@property或者大括号声明的变量称作Car这个类的属性
而您进入主程序,设置一个Car类的变量,并声明了一个内存空间给它
                                         Car * instanceCar = [[Car alloc]init];
那么这个"instanceCar"就是一个 实例对象(也是一个变量),这个变量是属于Car这个类的,所以这个变量可以使用Car类中所有的属性,也就是说,您可以用instanceCar.某属性的方法直接为这些变量赋值,而赋值后instanceCar这个变量就是一个独一无二的变量,是一个已经具体化的汽车的例子,所以称作实例对象(变量).

二、了解了什么是属性后,我们要学习为什么用属性?属性有什么作用?
      我们通过声明属性(@property)来摆脱繁琐的setter和getter方法的创建。@property声明与实现文件中的另一个声明@sythesize相结合,来完成setter和getter方法的创建。@property生成设置器和访问器方法的声明,@synthesize 生成设置器和访问器方法的实现。
注意:只有当访问器不存在的时候, @synthesize才会自动生成访问器,所以,即使是使用 @synthesize声明了一个属性,你仍然可以实现自定义的getter和setter。
属性是设置实例变量的方法,也是获取实例变量的方法。

三、属性注意事项:

1、当属性名和成员变量名一样时,如果我们想保证成员变量有值,那么就需要在.m中加入@synthesize 变量名

2、当属性名和成员变量名一样时,如果我们对成员变量的值不强求,但我们又想打印赋上的值,这时在.m里可以使用_属性名 或者 self.属性名

3、当定义一个属性时,会首先查找是否有以_属性名命名的成员变量,如果有,则默认对其进行set和get,如果没有,则隐式生成以_属性名命名的变量

4、当我们使用属性时,成员变量可以省略

程序如下:

#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {

@autoreleasepool {

Person *p = [[Person alloc] init];
        p.name = @"王三";//默认调用name的set方法
        NSLog(@"==%@",p.name);//默认调用get方法
        [p sayHi];
    }
    return 0;

}

1、当属性名和成员变量名一样时,如果我们想保证成员变量有值,那么就需要在.m中加入@synthesize 变量名

#import <Foundation/Foundation.h>

@interface Person : NSObject{
    NSString *name;//对应注意1

}

//属性的关键字,属性帮我们封装了set和get方法
@property (nonatomic, strong) NSString *name;

@property (nonatomic, assign) int a;

-(void)sayHi;

@end

#import "Person.h"

@implementation Person

//@synthesize name;

-(void)sayHi{
    NSLog(@"我是%@",name);

}

@end

//2、当属性名和成员变量名一样时,如果我们对成员变量的值不强求,但我们又想打印赋上的值,这时在.m里可以使用_属性名 或者 self.属性名

#import <Foundation/Foundation.h>

@interface Person2 : NSObject{
    NSString *name;
}
@property NSString *name;
-(void)sayHi;

@end

#import "Person2.h"

@implementation Person2

-(void)sayHi{
    NSLog(@"--%@",_name);
    NSLog(@"--%@",self.name);

}

@end

//3、当定义一个属性时,会首先查找是否有以_属性名命名的成员变量,如果有,则默认对其进行set和get,如果没有,则隐式生成以_属性名命名的变量

#import <Foundation/Foundation.h>

@interface Person3 : NSObject{
    NSString *_nam8e;
}

@property NSString *name;

-(void)sayHi;

@end

#import "Person3.h"

@implementation Person3

-(void)sayHi{
    NSLog(@"--%@",_name);
    NSLog(@"--%@",self.name);

}

@end

//4、当我们使用属性时,成员变量可以省略

#import <Foundation/Foundation.h>

@interface Person4 : NSObject

@property NSString *name;

-(void)sayHi;

@end

#import "Person4.h"

@implementation Person4
-(void)sayHi{

NSLog(@"--%@",_name);

NSLog(@"--%@",self.name);

}

@end

				
时间: 2024-11-05 14:16:00

oc总结第四讲:属性的相关文章

《上古天真论》第十四讲文字版

上古天真论篇第十四讲 主讲:徐文兵  主持:梁  冬 播出时间:2009-03-14  23:00—24:00 经文:季以恬愉为务,以自得为功,形体不敝,精神不散,亦可以百数.其次有贤人者,法则天地,象似日月,辨列星辰,逆从阴阳,分别四时,将从上古合同于道,亦可使益寿而有极时. 梁冬:是的,重新发现中医太美,大家好!欢迎收听在这么晚,晚上十一点,坚持收听国学堂之重新发现中医太美,非常感谢!也同时呢,感谢我们今天的徐老师来到我们今天的演播室,徐老师你好!徐文兵:梁冬好!听众朋友们大家好!梁冬:是的

《ArcGIS Engine+C#实例开发教程》第四讲 状态栏信息的添加与实现

原文:<ArcGIS Engine+C#实例开发教程>第四讲 状态栏信息的添加与实现 摘要:在上一讲中,我们完成了 MapControl 和PageLayoutControl两种视图的同步工作,本讲我们将完成状态栏信息的添加与实现.应用程序的状态栏一般用来显示程序的当前状态,当前所使用的工具. GIS应用程序一般也在状态栏显示当前光标的坐标.比例尺等信息.学习完本讲内容,您将学会状态栏编程的基本方法,并且能够在我们的程序的状态栏中添加且显示以下信息:当前所用工具信息.当前比例尺.当前坐标.  

转:C#精髓 第四讲 GridView 72般绝技

说明:准备出一个系列,所谓精髓讲C#语言要点.这个系列没有先后顺序,不过尽量做到精.可能会不断增删整理,本系列最原始出处是csdn博客,谢谢关注. C#精髓 第四讲 GridView 72般绝技 作者:清清月儿 主页:http://blog.csdn.net/21aspnet/ 时间:2007.3.24-26 为了写本文,又搭工又搭料,累的2天2宿没睡觉,这篇文章实在是耗费我太多的心血,版权永远属于CSDN社区的我,请不要试图修改本文,破坏全文的完整性,希望您尊重我的劳动成果! 快速预览: Gr

第四讲 社会主义初级阶段的分配与消费

第四讲  社会主义初级阶段的分配与消费1 <马克思主义与改革>(经济学篇) 第一节  我国国民收入的分配 一.社会总产值和国民收入 社会总产值是指我国一年内由物质生产部门劳动者生产出来的社会总产品的总价值.全国在一年中生产的物质资料,表现为实物形式和价值形式.从实物上称为社会总产品,它分为生产资料和消费资料两部分:从价值上称为社会总产值,它分为生产中消耗的生产资料旧价值和劳动者创造的新价值.其中新价值又分为两部分,一是劳动力价值即劳动者报酬,二是剩余价值即经营利润. 国民收入是社会总产值的一部

视觉SLAM十四讲随笔

**************************************************************************************************************************************************ch1:clion的使用 断点设置之后,逐行执行 (Step Into) ( F7 ),逐函数执行 (Step Over) ( F8 ),注意0和O在clion中的显示区别,0是中间有个点的 O看起来像0,中

第四讲课后题

本讲主要学习了静态类的使用方法: 1.使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数.请写一个类,在任何时候都可以向它查询"你已经创建了多少个对象?". 代码: 1 package 课后四讲; 2 3 import javax.swing.JOptionPane; 4 5 class Example 6 { 7 static int value=0; 8 public Example() 9 { 10 value++; 11 12 } 13 } 14 public cl

PHP100-第四讲 PHP5.4 运算符、流程控制

PHP中有丰富的运算符集,它们中大部分直接来自于C语言.按照不同功能区分,运算符可以分为:算术运算符.字符串运算符.赋值运算符.位运算符.条件运算符,以及逻辑运算符等.当各种运算符同在一个表达式中时,它们的运算是有一定的优先级的,下面将详细介绍.PPT下载请点击 PHP5.4 的流程控制语句if / switch-- PHP100-第四讲 PHP5.4 运算符.流程控制,布布扣,bubuko.com

32位汇编第四讲,干货分享,汇编注入的实现,以及快速定位调用API的数量(OD查看)

32位汇编第四讲,干货分享,汇编注入的实现,以及快速定位调用API的数量(OD查看) 昨天,大家可能都看了代码了,不知道昨天有没有在汇编代码的基础上,实现注入计算器. 如果没有,今天则会讲解,不过建议把昨天代码熟悉一遍(课程是紧跟着来的,请不要拉下任何一天,因为今天的知识, 可能就和昨天的知识挂钩,昨天的知识,和前天的挂钩.....,当然你如你懂汇编,不是新手,那么则可以直接往下看) 一丶远程线程注入,和汇编远程注入的区别 昨天的代码,大家可能看了(没看也没有关系,就是远程线程注入的代码,开发角

机器学习中使用的神经网络第四讲笔记

Geoffery Hinton教授的Neuron Networks for Machine Learning的第四讲主要介绍如何使用back propagation算法来学习到词汇的特征表示. Learning to predict the next word 接下来的几小节主要介绍如何使用back propagation算法来学习到词汇的特征表示.我们从一个很简单的例子开始,介绍使用back propagation算法来将词汇间的相关信息转换成特征向量. 下图给出了一个家庭的树状图,我们要做的