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)方法参数书写要注意

最优化学习笔记(十七)——拟牛顿法(3)

秩1修正公式    在秩1修正公式中,修正项为αkz(k)z(k)T,αk∈R,z(k)∈Rn\alpha_k\boldsymbol{z}^{(k)}\boldsymbol{z}^{(k)T}, \a...
  • chunyun0716
  • chunyun0716
  • 2017年01月08日 14:43
  • 466

Objective-C学习笔记和IOS入门

1. main(int argc, char * argv[]){} (因为程序名总是用作启动参数传递,所以argc的值至少是1) 2. NSLog(@"some strings"); @"" ...
  • wen942467928
  • wen942467928
  • 2016年05月09日 14:14
  • 1002

JSP学习笔记七之Cookie

首先提一下http协议的无状态性,指的是服务器不会记住已经给它发过请求的客户端。每次收到请求都会认为是一个新的客户端发过来的。(即:服务器不会记住给他发过请求的客户端)。 所以这个时候我们就需要使用...
  • LULEI1217
  • LULEI1217
  • 2016年03月22日 13:44
  • 2042

Object-C学习(七):预处理程序

预处理程序预处理程是OC编译过程的一部分,用来识别散布在程序中的特定语句,是在分析OC程序之前处理这些语句。预处理程序语句使用“#”号标记,而且这个符号必须是一行中第一个非空语句。#define语句它...
  • xushuxuan
  • xushuxuan
  • 2013年08月20日 17:02
  • 323

Struts2 Setter&Getter

Setter&Getter方法可以接收客户端传过来的值,直接set到Action所定义的属性当中。 例如:用户登录页面,有用户名 密码文本框,点击“登录”按钮时,会根据文本框的name属性,找到对应...
  • u800820
  • u800820
  • 2015年10月08日 13:23
  • 211

人工智障学习笔记——机器学习(11)PCA降维

一.概念 Principal Component Analysis(PCA):主成分分析法,是最常用的线性降维方法,它的目标是通过某种线性投影,将高维的数据映射到低维的空间中表示,即把原先的n个特征用...
  • sm9sun
  • sm9sun
  • 2017年12月09日 13:54
  • 765

Object-C学习笔记

最近休息在家,闲来无事想搞一个iphone的游戏玩玩,于是买了本 图灵 的 Object-C基础教程 看了看,这本书还算比较基础,里面讲解知识点也比较通俗易懂,尤其是做过一些开发的人,基本上没有什么太...
  • zyw0713
  • zyw0713
  • 2015年09月20日 09:09
  • 352

Linux netfilter 学习笔记 之七 ip层netfilter的连接跟踪模块的概念及相关的数据结构分析

内核版本 2.6.16   连接跟踪(CONNTRACK)就是跟踪并且记录连接状态。包括 TCP 、UDP、ICMP  等协议类型的连接。其主要是判断该数据包是什么状态。根据数据包的源ip地址、目...
  • lickylin
  • lickylin
  • 2014年06月26日 00:13
  • 4040

object-c学习笔记

原文地址 最近开始学习object-c,分享一下学习oc的经验以及对oc的理解,其中难免会有错误,请大家理解。 对初学者来说,objective-c存在了很多令人费解的写法,当然也包括我! 我刚...
  • u012965341
  • u012965341
  • 2016年03月04日 14:06
  • 185

Object-c学习笔记

写在前面 这些笔记包括了工作中的问题总结和日常学习的记录,可能初期排列顺序会比较乱,后面整理吧(作者是初学者,有不准确的地方请帮忙指正) 很久没有更新了,这段时间准备更新起来,从头开始,加个标签,...
  • duoduo___
  • duoduo___
  • 2015年12月17日 19:17
  • 147
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Object-C 学习笔记(七)---setter&getter
举报原因:
原因补充:

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