//getter setter
-(void)setAge:(int)age;
-(int)getAge;
-(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;
注意:
//
// 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