2015.6.30 第二堂 property

本节主要学习了用property声明变量的set get方法,效率正常。

小结:

技术瞬息万变,要学会推翻和改变之前的看法。

注:.h文件声明的时成员变量和方法。 (自己的错误读法:声明类和方法)


知识点一:property

关于@property的属性变量,有以下三个功能:

1、声明了setter方法 2、声明了getter方法 3、声明了一个变量,变量本身的名字是__name

举例:

在.h文件中完成对set和get方法的声明 @property (nonatomic,strong) NSString *name;

在.m文件中完成对set和get方法的实现 @synthesize name=_name  // 随着更新 property已自动完成实现 此句可省略


@property 大大简化了步骤

@property (nonatomic,strong) NSString *name;

等同于

-(void)setName:(NSString *)name;

-(NSString *)name;

总之,一句property代替了set、get方法的声明,声明了一个变量,也不用实现了。

知识点二:property的关键词理解

nonatomic:非原子操作 线程不安全 (无锁机制)效率高 (一般都写这个)

atomic:原子操作 线程安全(有锁机制) 效率低(默认)


OC对象类型都为strong/retain

strong:声明强引用 引用计数+1 retainCount

weak:弱引用 不引用

retain:strong同样的功能

copy:复制一个同样的对象(创建一片内存,将对象的内容拷贝到这片独立的内存)(拷贝的多了占用很多内存,所以不好)


readWrite:默认-可读(有getter方法) 可写(setter)

readOnly:只读(同上)


setter:使用方式setter=setCatName:

getter:使用方式getter=getCatName:


assign:C语言的基本数据类型

举例:

@property (nonatomic,strong) NSString *address;

@property (nonatomic,assign) float age;

知识点三:关于[]调用 和.

Cat *jfm=[[Cat alloc]init];

jfm.address=@"桃园";

 等同于 [jfm setAddress:@"桃园"];         //set方法需要写出 方法名:参数

NSLog(@"%@ %@",jfm.address);

等同于NSLog(@"%@ %@",[jfm name]);       // get方法只需要直接写参数名name就可以了


.h中内容供参考:@property (nonatomic,strong)NSString *name;

//- (void)setName:(NSString *)name;

//- (NSString *)name;


@property (nonatomic, strong) NSString *address;

//- (void)setAddress:(NSString *)address;

//- (NSString *)address;



参考资料:

实例变量和属性的区别:http://zhidao.baidu.com/question/1960023972532644380.html?fr=iks&word=oc%B3%C9%D4%B1%B1%E4%C1%BF%D4%F5%C3%B4%CA%B5%CF%D6&ie=gbk

oc中的Set函数、Get函数、点语法和类方法等http://bbs.itheima.com/thread-139714-1-1.html


附:实验代码

//
//  main.m
//  Review
//
//  Created by PengXiaodong on 15/6/30.
//  Copyright (c) 2015年 PengXiaodong. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Person.h"
#import "Cat.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //实例方法 类方法
        Person *pxd = [[Person alloc] init];
        [pxd setAge:28];
        NSLog(@"%d", [pxd age]);
        
        //创建一个字符串对象
        //NSString *name = [[NSString alloc] initWithString:@"iOS开发"];
        Cat *jfm = [[Cat alloc] init];
        jfm.name = @"西南大学"; //调用name变量的set方法
        [jfm setName:@"西南大学"];
        
        jfm.address = @"橘园";
        [jfm setAddress:@"橘园"];
        
        NSLog(@"%@ %@", jfm.name, jfm.address);//调用get方法
        NSLog(@"%@ %@", [jfm name], [jfm address]);//调用get方法
    }
    return 0;
}

//
//  Cat.h
//  Review
//
//  Created by PengXiaodong on 15/6/30.
//  Copyright (c) 2015年 PengXiaodong. All rights reserved.
//

#import <Foundation/Foundation.h>
/*
 旧的变量声明的方式存在一个弊端
 1. 繁琐 每一个变量都需要提供一个set方法 get方法 同时需要去实现这个两个方法
 
 解决上面的问题
 property-声明了变量的set get方法
 synthesize-实现了set get方法
 */

/*
 @property属性变量
1. 声明了setter方法
2. 声明了getter方法
3. 声明了一个变量 这个变量本身的名字是 _name
- (void)setName:(NSString *)name;
- (NSString *)name;
 */

/*
 关键字
 nonatomic:非原子操作 线程不安全(没有加锁 解锁机制) 效率高
 atomic:原子操作 线程安全(有加锁 解锁机制) 默认     效率低
 
 ->OC对象类型 strong/retain
 strong:声明强引用 引用计数+1 retainCount
 weak: 弱引用  不引用
 retain:strong同样的功能
 copy:复制一个同样的对象(创建一片内存,将对象的内容拷贝到这片独立的内存)
 
 readWrite:默认-可读(有getter方法)可写(有setter方法)
 readOnly:只能读(只有getter方法 没有setter方法)
 
 setter:  使用方式setter=setCatname:
 getter:  使用方式getter=getCatName
 
 assign:  C语言的基本数据类型
 */
@interface Cat : NSObject

@property (nonatomic, strong) NSString *name;
//- (void)setName:(NSString *)name;
//- (NSString *)name;

@property (nonatomic, strong) NSString *address;
//- (void)setAddress:(NSString *)address;
//- (NSString *)address;

@property (nonatomic, assign) float age;

@end





//
//  Cat.m
//  Review
//
//  Created by PengXiaodong on 15/6/30.
//  Copyright (c) 2015年 PengXiaodong. All rights reserved.
//

#import "Cat.h"

@implementation Cat
//@synthesize name = _name;//完成了set方法 get方法的实现

@end

//
//  Person.h
//  Review
//
//  Created by PengXiaodong on 15/6/30.
//  Copyright (c) 2015年 PengXiaodong. All rights reserved.
//

#import <Foundation/Foundation.h>

/*
 旧的变量声明的方式存在一个弊端
 1. 繁琐 每一个变量都需要提供一个set方法 get方法 同时需要去实现这个两个方法
 
 解决上面的问题
 property-声明了变量的set get方法
 synthesize-实现了set get方法
 */
@interface Person : NSObject{
    //声明变量
    int age;//成员变量
}

//定义方法
//set方法 设置变量的值
- (void)setAge:(int)aAge;

//get方法 后去变量的值
- (int)age;

@end

//
//  Person.m
//  Review
//
//  Created by PengXiaodong on 15/6/30.
//  Copyright (c) 2015年 PengXiaodong. All rights reserved.
//

#import "Person.h"

@implementation Person

- (void)setAge:(int)aAge{
    age = aAge;
}

- (int)age{
    return age;
}
@end


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值