oc _属性

//  main.m

//  OC04_属性

//

//  Created by dllo on 15/7/17.

//  Copyright (c) 2015年 cml. All rights reserved.

//

#import <Foundation/Foundation.h>

#import "Person.h"

#import"Student.h"

#import "Animal.h"

int main(int argc,constchar * argv[]) {

//    Person *per =[[Person alloc] init];

//对象通过设置器对成员变量内容进行修该

//    [per  setName:@"你好"];

//对象通过访问器来进行取值

//    NSLog(@"%@",[per name ]);

//属性一共做了三件事

// 1.声明了设置器,setter和访问器getter

// 2.实现了设置器和访问器

// 3.声明了一个成员变量,成员变量命名会在属性名前面加一个下划线

//具体的数据储存,还是成员变量来完成的,属性只不过帮助程序员完成一些繁琐的工作,简化代码

//    Person *per =[[Person alloc] init];

//    [per hobby];

////    [per buhao];

//    Student *stu=[[Student alloc] init];

//    [stu setStuName:@"鹰王"];

//    NSLog(@"%@",[stu stuName]);

//针对对象的属性,我们可以使用点语法,来获取对象的内容,也可以进行设置

//    [email protected]"崔某";

//    NSLog(@"%@",stu.stuName);

//通过点语法,可以对属性进行操作,大量节省了代码

// 离=号近的是setter方法,其余的都是getter方法

// KVC

// key- value -coding

//把属性名看成kvc中得key建,把要修改的值看成value,然后通过kvc的方法,把值赋值给指定的key

//    Student *stu=[[Student alloc] init];

//    [stu setValue:@"崔某" forKey:@"stuName"];

//    NSLog(@"%@",stu.stuName);

//    NSLog(@"%@",[stu valueForKey:@"stuName"]);

//

//    [stu setValue:@"5756" forKey:@"Name"];

//

//    NSLog(@"Name = %@",stu.Name);

//    NSLog(@"name = %@",stu.name);

//

// alloc init

Animal *animalOne =[[Animalalloc]initWithColor:@"红色"size:20age:20 type:@"狗"];

//通过点语法对对象的值进行修改和设置

[email protected]"黄";

id animalTest = [AnimalAnimalWithColor:@"grey"size:3age:5 type:@"dg"];

NSLog(@"idTest = %@",[animalTestcolor]);

// 便利构造器

Animal *animalTwo=[AnimalAnimalWithColor:@"橙色"size:10age:10 type:@"猫"];

[email protected]"鸟";

NSLog(@"%@",animalTwo.color);

// KVC

[animalOnesetValue:@"白色"forKey:@"Color"];

NSLog(@"%@",[animalOnevalueForKey:@"color"]);

return0;

}

//  Person.h

//  OC04_属性

//

//  Created by dllo on 15/7/17.

//  Copyright (c) 2015年 cml. All rights reserved.

//

#import <Foundation/Foundation.h>

@interface Person :NSObject

// 属性

@property NSString *name;

//@property NSString *sex;

//@property NSInteger age;

// 属性的属性

// 1.读写控制 :readonly,readwrite

// readonly设置之后,属性就没有setter,默认是readwrite

// setter和getter的作用是给设置器和访问器的方法重新起一个名字,注意:设置器载明的设置时候不要忘记加:

@property()NSString *hobby;

// 第二部分 原子性控制

// 通过原子性atomic来监控实物在整个过程中又没有完成,但是一般来讲我们就是对数据的简单赋值,一般我们这部分用nanatomic

@property (atomic)NSString *sex;

// 第三部分语义 设置

// copy, assign, retain

// retain一般是对象类型会用到,比如我们自己写的类,还有NSArray会用

// assign一般是NSInteger,CGFloat会使用,因为他们在栈区,不需要内存管理,所以用asign

// copy 一般只有字符串会用copy

@property(nonatomic ,copy)NSString *color;

@property(nonatomic ,assign)NSInteger age;

@property(nonatomic ,assign)CGFloat score;

@property(nonatomic ,retain)NSArray *arr;

-(void)sayHi;

@end

//  Person.m

//  OC04_属性

//

//  Created by dllo on 15/7/17.

//  Copyright (c) 2015年 cml. All rights reserved.

//

#import "Person.h"

@implementation Person

// 属性的实现

// 关键词@sythesize,前面放属性名,后面放对应的成员变量

// zaiXCode4.5之后才开始不写的,所以之前的老的程序里,还有大量的@synthesize

//@synthesize name = _name;

-(void)sayHi{

NSLog(@"%@",_name);

}

@end

//  Animal.h

//  OC04_属性

//

//  Created by dllo on 15/7/17.

//  Copyright (c) 2015年 cml. All rights reserved.

//

#import <Foundation/Foundation.h>

@interface Animal :NSObject

// 四条属性

@property(nonatomic ,copy)NSString *color;

@property(nonatomic ,assign)CGFloat size;

@property(nonatomic ,assign)NSInteger age;

@property(nonatomic,copy)NSString *type;

// 自定义初始化

-(id)initWithColor:(NSString *)color

size:(CGFloat)size

age:(NSInteger)age

type:(NSString *)type;

// 便利构造器

+ (id)AnimalWithColor:(NSString *)color

size:(CGFloat)size

age:(NSInteger)age

type:(NSString *)type;

@end

//  Animal.m

//  OC04_属性

//

//  Created by dllo on 15/7/17.

//  Copyright (c) 2015年 cml. All rights reserved.

//

#import "Animal.h"

@implementation Animal

-(id)initWithColor:(NSString *)color

size:(CGFloat)size

age:(NSInteger)age

type:(NSString *)type{

self=[superinit];

if (self) {

_color=color;

_size=size;

_age=age;

_type=type;

}

return self;

}

+ (id)AnimalWithColor:(NSString *)color

size:(CGFloat)size

age:(NSInteger)age

type:(NSString *)type

{

Animal *animal =[[Animalalloc]initWithColor:colorsize:sizeage:agetype:type];

return animal;

}

@end

//  Student.h

//  OC04_属性

//

//  Created by dllo on 15/7/17.

//  Copyright (c) 2015年 cml. All rights reserved.

//

#import <Foundation/Foundation.h>

#import "Person.h"

@interface Student :NSObject

@property(nonatomic,copy)NSString *name;

@property(nonatomic,copy)NSString *Name;

// 1.学生的姓名

@property(nonatomic ,copy)NSString *stuName;

// 2.学生的年龄

@property(nonatomic ,assign)NSInteger stuAge;

// 3.学生的成绩

@property(nonatomic ,assign)CGFloat stuScore;

// 4.学生有一个人的属性

@property(nonatomic ,retain)Person *per;

// 5.学生有一个数组的属性

@property(nonatomic ,retain)NSArray *arr;

// 6.

@property(readonly,getter=isSelected,nonatomic,assign)BOOL selected;

@end

//  Student.m

//  OC04_属性

//

//  Created by dllo on 15/7/17.

//  Copyright (c) 2015年 cml. All rights reserved.

//

#import "Student.h"

@implementation Student

@end

时间: 2024-12-13 03:57:48

oc _属性的相关文章

OC中属性及方法

1.声明式属性    a.实例变量    b.声明属性        自动生成setter/getter方法        .h ->@property 属性类型 属性名;        .m ->@synthesize 属性名 = 实例变量名;    c.点语法2.IOS5中的属性    a.实例变量  省        会自动生成实例变量,实例变量名 等于 _属性名    b.声明属性        @property 属性类型 属性名;        @synthesize 属性名 =

OC中属性self.a与_a访问的区别

在OC中我们可以通过指令@property定义属性. OC对属性封装了许多方法,同时也会自动实现一些方法,相比实例变量,感觉更加面向对象些. 一般定义属性的方法如下,在Class Test中定义属性int a. @interface Test:NSObject @property int a; -(void) changeAValue:(int) newValue; @end 在类的实例方法中,我们可以用下面两种方式来访问a属性: 1.直接用属性名访问: -(void) changeAValue

iOS runtime探究(三): 从runtime开始理解OC的属性property

你要知道的runtime都在这里 转载请注明出处 http://blog.csdn.net/u014205968/article/details/67639303 本文主要讲解runtime相关知识,从原理到实践,由于包含内容过多分为以下五篇文章详细讲解,可自行选择需要了解的方向: 从runtime开始: 理解面向对象的类到面向过程的结构体 从runtime开始: 深入理解OC消息转发机制 从runtime开始: 理解OC的属性property 从runtime开始: 实践Category添加属

CSS学习_属性选择器

CSS选择器参考 [attribute]--选取带有指定属性的元素: [attribute=value]--选取带有指定属性和值的元素: [attribute~=value]--选取属性值中包含指定词汇的元素: [attribute|=value]--选取带有以指定值开头的属性值的元素,该值必须是整个单词: [attribute^=value]--匹配属性值以指定值开头的每个的元素: [attribute$=value]--匹配属性值以指定值结尾的每个的元素: [attribute*=value

Objective-C学习笔记_属性

一.属性 属性是Objective-C 2.0定义的语法,为实例变量提供了setter.getter方法的默认实现.能在一定程度上简化程序代码,并且增强实例变量的访问安全性. 属性的声明 与类相似,属性也需要声明和实现. 属性的声明:使用@property声明属性 例如:@property NSString *name: 相当于 @interface 中声明了两个方法(setter.getter): - (void)setName:(NSString *)name; - (NSString *)

_.属性和self.属性,我遇到的那些坑

只怪当时_.属性和self.属性当时没有研究透,所以为自己掉入坑里埋下了伏笔.下面从我的坑开始说起: 我写了个懒加载,重写了一个数组属性的get方法,在get方法里面创建了一个数组来获取数据,那么调用这个属性的话,都是能得到数据的.怪自己为了省力加对于_.属性和self.属性理解不够,用了_.属性.然后程序运行发现数据获取不到,半天找不到原因,费了好长时间才发现错误点是在_.属性这里.用了_.属性它其实并没有调用属性的get方法,所以并没有获取数据.为了验证这个想法,写了下面的事例代码: @pr

OC中属性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作用,在那种情况下用?

此次只做简单说明,不做代码演示! 1> readwrite:同时生成get方法和set方法的声明和实现 2> readonly:只生成get方法的声明和实现 3> assign:set方法的实现是直接赋值,用于基本数据类型 4> retain:set方法的实现是release旧值,retain新值,用于OC对象类型 5> copy:set方法的实现是release旧值,copy新值,用于NSString.block等类型 6> nonatomic:非原子性,set方法的

Android13_fragment_view动画_属性动画

1,fragment:片段,碎片 应用场景:微信,微博的导航栏 1.1从3.0之后的系统引进的控件,代表的是屏幕的一部分,因为以往在手机上的绘制控件问题不大,但是如果是平板界面,每次绘制大量的控件对资源消耗很大,会引起卡顿 fragment允许屏幕先更新界面的一部分,是界面的一部分 点击声音才显示声音的ui界面,点击存储才显示出存储的界面,但是并不是在页面跳转,而是布局文件的切换,点击切换布局文件,通过模块化来使用 FrameLayout布局和fragment最相配,因为它渲染速度最快,效率最高

OC --(8)-- 属性、点语法、KVC

一.属性 1.什么是属性 属性是 Objective - c 2.0 定义的语法,为实例变量提供了 setter.getter 方法的默认实现 能够在一定程度上简化程序,并且增强实例变量的访问安全性. 2.属性的定义 三.KVCKVC(Key-Value-Coding),键值编码,是一种间接访问实例变量的方法 key: 键,用于标示实例变量 value: 实例变量对应的值 修改值 获取值 注意: