[学习笔记—objective-c]《objective-c-基础教程第2版》第十一章属性

liguangsunls liguangsunls     2022-09-08     352

关键词:

11.1 使用属性值

@property float rainHandling;
//表明此类具有float类型的属性,其名称为rainHandling

注意:属性的名称不必与实例变量名称同样。

@synthesize rainHandling;
//表示创建了该属性的訪问代码

注意:使用属性后,能够不声明实例变量。编译器会声明。

有两个地方能够加入实例变量声明:

  • 头文件:让子类直接通过属性訪问变量
  • 实现文件:变量仅仅属于当前类

点表达式:

  • 点表达式出如今(=)的左边:setter方法
  • 点表达式出如今(=)的右边:getter方法

注意:假设訪问属性提示訪问的对象不是struct类型,请检查当前类是否已包括了所需的必备头文件

11.2 属性扩展

属性同样适用于int,char。BOOL,struct类型,也能够定义一个NSRect对象的属性

保留死循环(retain cycle):Car对象拥有engine对象,可是engine对象不能反过来拥有Car对象。

copy特性

  • name存取方法:
- (void)setName: (NSString *)newName {
          [name release];
          name = [newName copy];
} // setName

- (NSString *)name {
          return (name);
} // name

等同于:

//name属性是copy特性
@property (copy) NSString *name;
@synthesize name;

retain特性

  • engine 的存取方法:

- (void) setEngine: (Engine *) newEngine{

          [newEngine retain];
          [engine release];
          engine = newEngine;

} // setEngine

- (Engine *) engine{
          return (engine);
} // engine

等同于:

//engine属性使用的是保留和释放特性
@property (retain) Engine *engine;
@synthesize engine;

noatomic特性:iOS程序常常使用的技术。资源有限的设备上获得更好的性能。

假设自定义了存取方法。那么必须使用nonatomic特性。

默认特性:假设没有为属性指定不论什么特性,它们会默认使用nonatomic和assign特性。

11.21 名称的使用

属性的名称一般与支持属性的实例变量名称同样。


有时程序猿希望实例变量是一个名称,而公开的属性是还有一个名称。

@property(copy)NSString *name;
@synthesize name = appellation;
// 编译器将创建-setName:和-name方法,但在实现代码中用的是appellation实例变量。

注意

直接訪问实例变量:self.name
使用訪问方法进行赋值:[self setName:@"Car"];

11.22 仅仅读属性

对于仅仅能读取,无法更改的值:

@property(readonly)float shoeSize;

注意:仅仅生成一个getter方法而不会生成setter方法

11.23 自己动手

@dynamic告诉编译器不要生成不论什么代码或创建对应的实例变量。

改变方法名:
使用getter=和setter=特性就能够自定义想要的方法名称

@property (getter=isHidden) BOOL hidden;
//告诉编译器生成名为isHidden的getter方法,并生成名为默认setHidden:的setter方法

注意:属性仅仅支持替代-setBlah和-blah方法,但不支持那些须要接收额外參数的方法

[oc学习笔记]熟悉objective-c(代码片段)

Objective-C使用“消息结构”而非“函数调用”。使用消息结构的语言,其运行时所应执行的代码由运行环境来决定;而使用函数调用的语言,则由编译器决定。采用消息结构的语言,不论是否多态,总是在运行... 查看详情

[学习笔记—objective-c]《objective-c-基础教程第2版》第九章内存管理

内存管理:确保在须要的时候分配内存,在程序运行结束时释放占用的内存假设仅仅分配内存而不释放内存,则会发生内存泄漏(leakmemory),程序的内存占用量不断添加。终于会被耗尽并导致程序崩溃。不要使用不论什么刚释放的... 查看详情

objective-c学习笔记:从helloworld开始

...玩IOS开发,询问过北京某大牛后,人家给我推荐Objective-C。为嘛不是swift呢?我也不细究,反正咱现在的首选编程语言是C,那就用Objecive-C吧.希望能坚持下来。嘿嘿……import和include的区别import和include都可以用... 查看详情

objective-c学习笔记(十九)——对象方法和类方法的相互调用

     事实上在OC的对象方法(减号方法)和类方法(加号方法)并非相互独立的,它们也能够发生千丝万缕的关系,今天我们来研究下它们两者相互调用的问题。该样例还是以People类为基础。(一)对象方法调... 查看详情

objective-c学习笔记——循环语句for和do-while的使用

     在OC中。除了while这样的循环方式外,还有另外for循环和do-while循环。它们在不同的业务逻辑下会有不同的作用。能够和C语言和Java对照着学习。(一)代码一:intmain(intargc,constchar*argv[]){@autoreleasepool{for(inti=0... 查看详情

objective-c学习笔记(二十二)——初始化方法init的重写与自己定义

     初学OC。对init这种方法不是非常了解。我们如今来分别对init方法进行重写以及自己定义,来加深对他的了解。本样例也是用Person类来进行測试。(一)重写init方法。(1)在Person.h中声明init方法:-(instancety... 查看详情

用 Xcode 学习objective-c?

】用Xcode学习objective-c?【英文标题】:learningobjective-cwithXcode?【发布时间】:2011-02-2810:21:00【问题描述】:我是一名PHP开发人员,想通过其著名的IDE-XCode学习Objective-c的用法,以开始为iphone构建IOS应用程序,然后在AppStore上出售... 查看详情

objective-c高级编程笔记

引用计数:通过给对象计数标志,来判断是否释放对象注:只能释放自己持有的对象idobj=[NSMutableArrayarray]如obj这个对象,并不是你所持有的对象,所以你无法进行释放但是你可以通过retain来持有这个对象[objretain][objrelease]什么样的... 查看详情

关于在线学习 C 以准备学习 Objective-C 的任何建议

】关于在线学习C以准备学习Objective-C的任何建议【英文标题】:AnysuggestionsonwheretolearnConlineinpreparationoflearningObjective-C【发布时间】:2010-10-2816:57:49【问题描述】:我已经编写PHP和mySQL大约8年了。我每天都了解并在我的项目中使用... 查看详情

objc_msgsend消息传递学习笔记–对象方法消息传递流程

在EffectiveObjective-C2.0–52SpecificWaystoImproveYouriOSandOSXPrograms一书中,tip11主要讲述了Objective-C中的消息传递机制。这也是Objective-C在C的基础上,做的最基础也是最重要的封装。 StaticBindingAndDynamicBinding C中的函数调用方式,... 查看详情

objective-c学习1

   首先,我要说的是,想要学好Objective-C(下面简称OC)就必需要有C语言的基础。由于OC是C语言的一个超集;OC是面向对象的语言.[C语言是面向过程的语言],OC中的好多语法和C语言中类似。OC也全然能够兼容C语言... 查看详情

objective-c基础笔记block

Block(代码段)封装了一段代码,能够在不论什么时候运行。Block能够作为函数參数或者函数返回值,而其本身又能够带输入參数或返回值。它和传统的函数指针非常相似,可是有差别:block是inline(内联函数)的,而且默认情况下... 查看详情

objective-c基础笔记(7)foundation中的经常使用结构体

一、NSRangeNSRange的定义:typedefstruct_NSRange{NSUIntegerlocation;NSUIntegerlength;}NSRange;NSRanage的使用:NSRangerange=NSMakeRange(8,10);NSLog(@"location:%zi",range.location);NSLog(@"length:%zi",range.length 查看详情

《objective-c高级编程ios与osx多线程和内存管理》读书笔记(代码片段)

《Objective-C高级编程iOS与OSX多线程和内存管理》读书笔记第一章:自动引用计数自己生成的对象,自己所持有。非自己生成的对象,自己也能持有不再需要自己持有的对象时释放非自己持有的对象无法释放对象操作Obje... 查看详情

理解 Objective-C 中的@Protocols

】理解Objective-C中的@Protocols【英文标题】:Understanding@ProtocolsinObjective-C【发布时间】:2011-04-2101:10:37【问题描述】:我是编程的初学者,也是Objective-C的初学者。我学习了基本的C并决定开始学习Objective-C。我正在阅读StevenKochan的... 查看详情

Objective-C 中的 UIScreenEdgePanGestureRecognizer

】Objective-C中的UIScreenEdgePanGestureRecognizer【英文标题】:UIScreenEdgePanGestureRecognizerinObjective-C【发布时间】:2020-07-2402:39:25【问题描述】:我正在学习objective-c,不知道这段代码是做什么的。我了解UIScreenEdgePanGestureRecognizer的作用。... 查看详情

objective-c和swift语言,哪个更容易学习?

参考技术A这个问题很有意思,下面我来谈谈我的看法。Objective-CObjective-C,通常写作ObjC和OC,和目的C或Obj-C使用量少,是一种面向对象的编程语言扩展它主要用于两MacOSX和GNUstep系统使用的程序和标准,在NeXTSTEP,它是更基本的程... 查看详情

在 Objective-C 中的类属性上使用单词“set”

】在Objective-C中的类属性上使用单词“set”【英文标题】:Usingtheword\'set\'onaclass\'spropertyinObjective-C【发布时间】:2017-10-1619:00:48【问题描述】:我正在学习iOS开发,并选择在Objective-C和Swift之间来回切换以注意差异或相似之处。在... 查看详情