/**
* 一个简单的对象
*
* @author suzhen
*
*/
public class SimpleObjcet {
/**
* 声明一个age字段
*/
private Object obj; /**
* 取方法
*
* @return
*/
public Object getObj() {
return obj;
} /**
* 存方法
*
* @param obj
*/
public void setObj(Object obj) {
this.obj = obj;
}
}

//这是一段简单的java代码,展示了如何去通过存/取这个obj字段。

@property是OC语言里面的属性的意思,因为通过它,咱们可以方便的访问OC的字段,用别的语言的说法就是getter和setter或者存取方法。但是因为OC需要自己来管理内存,OC因此和别的语言又不太一样。

既然说了OC的与众不同,那在OC里面该咱们写呢?

下面我就来展示最原始的写法吧。这是一个book的头文件

//
// Book.h
// StudentAndBook
//
// Created by Suzhen on 14-3-16.
// Copyright (c) 2014年 Suzhen. All rights reserved.
// #import <Foundation/Foundation.h>
@interface Book : NSObject
//这里放置对象的声明
{
//访问修饰符
@private
//content就是书本的内容,暂时不要在意编译器的警告^.^
NSString* _content;
//pages是书本的页数
int _pages;
} //存取方法的声明 getter,setter
-(void)setContent:(NSString*)mContent;
-(NSString*) getContent; //pages的存取方法
-(void)setpage:(int)mContent;
-(int) getPages; //book的构造方法  
-(id)initWithPages:(int)pages andContents:(NSString*)content; @end

下面的是BOOK的实现文件

//
// Book.m
// StudentAndBook
//
// Created by Suzhen on 14-3-16.
// Copyright (c) 2014年 Suzhen. All rights reserved.
// #import "Book.h" @implementation Book //这就相当于一个构造函数,用来初始化一个对象
-(id)initWithPages:(int)pages andContents:(NSString *)content{
if(self = [super init]){
[self setContent:content];
[self setpage:pages];
}
return self; }
//一个对象引用计数器归零的时候会调用
-(void)dealloc{
NSLog(@"销毁了书本>>");
[[self getContent]release];
[super dealloc];
}
//page的set方法
-(void)setpage:(int)pages{
_pages=pages;
}
//content的set方法
-(void)setContent:(NSString *)mContent{
if(mContent!=_content){
[_content release];
[mContent retain];
}
_content=mContent;
}
//pages的get方法
-(int)getPages{
return _pages;
}
//content的get方法
-(NSString *)getContent{
return _content;
}
//描述,相当于java里面的tostring
-(NSString *)description{
return [self getContent];
}
@end

这样咱们就能安全的设置和获得这个Book中的属性了。

这样写其实还是很麻烦的,比较是咱们自己实现的方法,这样做太冗余了,如果book中又多个属性,那我们岂不是要写无数个存储方法?这样做一是很没有必要,二辉产生大量垃圾代码。

为了解决这个问题,OC给咱们设置了更加简单的方法

我们可以直接使用@property来直接声明一个字段,并且这个字段Xcode也会给咱们生成相应的存取方法。这样做不就简单多了呢?

#import <Foundation/Foundation.h>
//告诉编译器,有BOOK这个类的存在
//其实你也可以直接import这个book.h
//但是这样做性能更加好~
//@protocol同理,这个后面的文章会说到
@class Book; @interface Student : NSObject
//字段声明,这个的意思其实和Book类的声明是一个意思
//但是系统会给咱们自动生成存取方法,是不是更加方便呢
//当然了不会这么简单的,@property后面括号里面的属性还是很讲究的
@property(nonatomic,assign) int sid;
//这个对象就像是Book的content一样
//这段代码展开之后和那里面Book的Content的存取方法基本是一样的
@property(nonatomic,retain) Book* mBook; -(id)initWithId:(int)sid; -(void)keepBook:(Book*)mBook; @end

咱们只要声明sid,和mBook,就可以直接使用了(在高版本的xcode中咱们甚至连@synthesize都可以直接省略不写)

这么一来,咱们的编程效率可以更高了。为啥咱们这样做是对的呢?其实在xcode内部,早就给咱们自动展开代码了

真正的Student类其实是这样的

咱们可以这样展开:

@property(nonatomic,assign) int sid;展开为(括弧里面的属性暂时先别管咯)

int _sid;

@property(nonatomic,retain) Book* mBook;展开为

Book* _mBook;

前面的下划线就是xcode给咱们自动添上的,

在Student的实现文件中就会相应的展开存取方法

咱们就挑选mBook的存取方法来说一下

-(void)setmBook: (Book*) mBook{

  if( _mBook!=mBook){

    [_mBook release];

    _mBook= [mBook retain];

   }

}

这样子一展开,大家应该基本对@property有一个基本的了解了呢?

大家一起加油学习OC吧,楼主也是个新手,各位大神轻拍哦有错误咱们会第一时间更正的~

[OC笔记]@property之个人理解,大神轻拍的更多相关文章

  1. 对OC中property的一点理解

    最近在看即将要加入的项目的代码,看到一个protocol里包含着几个property.之前没有写过类似的代码,看到这里的时候,突然疑惑了一下,发现自己对property的理解好像有点模糊.所以回家后又 ...

  2. 对stm32寄存器的理解(个人理解,大神轻喷)

    学习了stm32有一年了,今天想来写写自己对寄存器的理解,帮助那些有志学习stm32的朋友们少走一些弯路. ---------------------------------------------- ...

  3. 爱了!阿里大神最佳总结“Flutter进阶学习笔记”,理论与实战

    前言 "小步快跑.快速迭代"的开发大环境下,"一套代码.多端运行"是很多开发团队的梦想,美团也一样.他们做了很多跨平台开发框架的尝试:React Native. ...

  4. 学习大神笔记之“MyBatis学习总结(二)”

    MyBatis对表的增删改查操作         主要有两种方式:基于XML实现和基于注解实现. 完整项目结构: 工具类:MyBatisUtil-------用于获取  sqlsession pack ...

  5. 理解z-index和css中的层叠顺序问题(大神技术博的读后感?)

    一直对 z-index不太理解,今天看到了大神的博客...http://www.zhangxinxu.com/wordpress/tag/z-index/ 1.层叠上下文:是一个名词!是一个性质!此时 ...

  6. 听justjavac大神live前端的入门与进阶小笔记

    代码规范 代码强壮,调试代码 少用变量,多用常量 少用for循环,why循环,多用函数式, 不要直接去使用框架 刷题 提高编程思维 用js去做c语音的问题 阅读别人代码,去看别人的代码 a+b> ...

  7. 大神都在看的RxSwift 的完全入坑手册

    大神都在看的RxSwift 的完全入坑手册 2015-09-24 18:25 CallMeWhy callmewhy 字号:T | T 我主要是通过项目里的 Rx.playground 进行学习和了解 ...

  8. 爱了,字节跳动大神最佳整理:582页Android NDK七大模块学习宝典,理论与实践

    前言 时至今日,短视频App可谓是如日中天,一片兴兴向荣.随着短视频的兴起,音视频开发也越来越受到重视,而且薪资水涨船高,以一线城市为例,音视频工程开发的薪资比Android应用层开发高出40%. 但 ...

  9. 老杜告诉你java小白到大神是怎么炼成的(转载)

    老杜告诉你java小白到大神是怎么炼成的 1. 学习前的准备 一个好的学习方法(应该怎么学习更高效): 一个合格的程序员应该具备两个能力 有一个很好的指法速度(敲代码快) 有一个很好的编程思想(编程思 ...

随机推荐

  1. source tree 推送错误解决

    fatal: The remote end hung up unexpectedly 出现这个问题是因为文件过大 解决办法: 打开git bash 输入git config --global http ...

  2. Stopwatch 类

    Stopwatch 为计时器的实现. 主要属性方法 属性和方法 说明 static GetTimestamp() 如果Stopwatch使用高分辨率的性能计数器,则返回该计数器的当前值:如果Stopw ...

  3. MongoDB中insert方法、update方法、save方法简单对比

    MongoDB中insert方法.update方法.save方法简单对比 1.update方法 该方法用于更新数据,是对文档中的数据进行更新,改变则更新,没改变则不变. 2.insert方法 该方法用 ...

  4. ES6新特性之模板字符串

    ES6新特性概览  http://www.cnblogs.com/Wayou/p/es6_new_features.html 深入浅出ES6(四):模板字符串   http://www.infoq.c ...

  5. Mongodb集群搭建过程及常见错误

    Replica Sets MongoDB 支持在多个机器中通过异步复制达到故障转移和实现冗余.多机器中同一时刻只 有一台是用于写操作.正是由于这个情况,为 MongoDB 提供了数据一致性的保障.担当 ...

  6. 【原创】android内存管理-hprof文件

    转载请注明出处 http://www.cnblogs.com/weiwangnuanyang/p/5703702.html 如果只是想确定一下某一个场景是否有内存泄漏,AndroidStadio的控制 ...

  7. 类的高级:访问修饰符、封装、静态类成员static、内部类;

    访问修饰符: 公开访问(public):对所有子类,非子类访问: 受保护的(protected):只有同包子类.非子类.不同包子类可访问,不同包非子类不可访问: 私有的(private):只有本类可访 ...

  8. ubuntu修改设备名称

    按住ctrl+alt+t打开终端 输入 sudo gedit /etc/hostname 出现一个打开的文件,显示的就是你的设备名字,也就是终端@的那个名字.将其修改成你想显示的名字,保存重启系统就可 ...

  9. java 分布式锁方案

    第一步,自身的业务场景: 在我日常做的项目中,目前涉及了以下这些业务场景: 场景一: 比如分配任务场景.在这个场景中,由于是公司的业务后台系统,主要是用于审核人员的审核工作,并发量并不是很高,而且任务 ...

  10. VMWare MAC系统调整磁盘

    VMware,打开虚拟文件,调整磁盘大小. 从40G调整到80G 进入虚拟机,打开终端 diskutil list;diskutil resizeVolume disk0s2 80GB http:// ...