Object-C 学习笔记(七)---setter&getter

原创 2013年12月02日 17:31:01
设置器(setter)&访问器(getter)
设置器(setter)和访问器(getter)提供了一个外界操作类内部属性的通道,但是在Object-C中,一般成员属性是私有(private)的,需要使用到设置器(setter)和访问器(getter),向外界暴露出接口.
   例子:
按照java C++ C#...的写法:
在.h文件里声明
//getter setter
-(void)setAge:(int)age;
-(int)getAge;


在.m文件里实现
-(void)setAge:(int)age
{
    _age = age;
}

-(int)getAge
{
    return _age;
}
但是Object-C中优化了设置器(setter)和访问器(getter),使用@property@synthesize代替.
例子:
.h 文件
@property int heigh;
-(void)show;
.m 文件
@synthesize heigh = _heigh;//使用_heigh等同于使用heigh
-(void)show
{
    NSLog(@"%d",_heigh);
}
main函数调用
        student.heigh = 10;//直接使用
        NSLog(@"%d",student.heigh);
        [student show];

深入探究

@property (nonatomic,strong) NSString* temp;  
@property (readonly , copy) NSString *temp;
...
括号里
第一个参数表示设置只读或读写:

readwrite:表示既有getter,也有setter

readonly:表示只有getter,没有setter

nonatomic:非原子性操作,表示不考虑线程安全

atomic:原子性操作

第二个参数表示setter的权限:

strong:指定有很强的(拥有)关系到目标对象。

weak:指定有弱(non-owning)关系到目标对象。如果目的地对象销毁,属性值将自动设置为nil。(弱属性不支持OS X上的v10.6和iOS 4,使用指定取而代之)。

copy:调用原始对象的copy()方法,创建一个原始对象的副本,用于分配给新的引用。原始的对象在调用release方法。当然这个属性只用于实现了NSCopying协议的对象类型。

assign:指定使用简单的赋值的setter。这个属性是违约。  使用这个属性对于标量的类型(如NSInteger和CGRect等);

retain: 指定retain应该调用对象上的。原始的对象在调用release。在OS X v10.6和之后,您可以使用这个关键字用于内存管理方面


例子:
//属性声明
//引用型使用retain,基本数据类型使用:assign
//nonatomic 非原子性操作(引起线程安全问题);atomic 原子性操作
@property(retain,nonatomic)NSString *name;
@property(assign,nonatomic)NSInteger age;
@property(retain,nonatomic)NSString *school;

//使用属性定义,自动生成getter和setter
@synthesize name = _name;
@synthesize age = _age;
@synthesize school = _school;


注意:

使用retain修饰符在系统内部生成的如下:
//
//  People.h
//  Memory
//
//  Created by 5016 on 13-12-4.
//  Copyright (c) 2013年 dradon. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface People : NSObject
{
    NSString* _address;
}

-(void)toString;
-(NSString*)getAddress;

@end
//
//  People.m
//  Memory
//
//  Created by 5016 on 13-12-4.
//  Copyright (c) 2013年 dradon. All rights reserved.
//

#import "People.h"

@implementation People


//@property(retain,nonatomic)NSString* address
//retain系统自动生成的使引用计数只加1
-(void)setAddress:(NSString*) address
{
    if (_address != address) {
        [_address release];
        _address = [address retain];

    }
     
}

-(NSString*)getAddress
{
    return _address;
}

@end




(1)在类(.h)中声明的方法都属于public方法,都可以通过对象调用,如果在类中没有声明,在.m文件里写,则该方法属于私有的,对象不能调用.
(2)使用@property 和 @synthesize 代替setter 和 getter用对象直接调用
 (3)方法参数书写要注意

Object-C学习笔记七-----Foundation Kit快速教程NSString and NSMutableString

在Foundation 框架中有很多有用的,面向数据的低级类和数据类型。其中比较重要的是。NSString NSArray NSEnumerator NSNumber等。 首先我们下熟悉一下常用的一...

Object-C学习笔记(一):类的定义

一、类的定义形式: 每当创建一个类的时候会出现2个扩展名文件,分别是.h和.m文件。 .h文件是类的声明文件(也叫接口文件),.m是类的实现文件,基本格式如下: .h接口文件Test.h:#impor...

Object-c的三大特性 学习笔记

学习OC的笔记,记下了分享一下。 Object-C,跟所有的面向对象语言一样,都具有三大特性。 三大特性:封装、继承、多态。   A.封装:     A.1成员变量的封装     ...

ios学习笔记之Object-C—字符串

在Object-c中,字符串的声明是: NSString *aString;  aString并不真正包含一个字符串对象—它是指向内存中字符串对象的指针。(和C语言中,用指针指向字符串的声明类似); ...

Object-C 学习笔记(六)---单例设计模式

说到单例,在java学习07-单例设计模式已经说的很清楚,Object-C也是一门面向对象的语言,于是除了写法不同,其他都是大同小异. ---未来会出一套 "设计模式"学习的笔记 原则: (1) ...

Object-C学习笔记之基础知识一

Object-C学习笔记之基础知识一

OC学习笔记(8)Object-C组合使用

1、ASPoint类 //.h #import @interface ASPoint : NSObject @property(nonatomic,assign) double x; @prop...

Object-C 学习笔记(三十)--- 归档(3)---对象归档

对象归档:把对象的数据归档到文件上,编程一种有结构型的文件数据,实现NSCoding协议(接口),实现归档与解档两个方法. 下面实例是一个对象归档是实例 // // User.h // def...

Object-C 学习笔记(八)---面相对象(继承)

类:是事物共性的抽象. 对象:是一个事物的具体表现. 继承特点: (1)Object-C是一种单继承的面相对象语言. (2)提高代码的复用性. (3)提高代码的扩展性 缺点...

object-c 内存管理学习笔记

NSAutoreleasePool *pool =[[NSAutoreleasePool alloc] init]; [pool drain]:这个函数可以把autoreleasePool里的对...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Object-C 学习笔记(七)---setter&getter
举报原因:
原因补充:

(最多只允许输入30个字)