文档章节

Objective-C, 为什么不能在init或是dealloc方法中使用accessor方法

nswish
 nswish
发布于 2014/08/06 16:21
字数 280
阅读 564
收藏 2

曾经阅读过苹果公司官方文档“Advanced Memory Management Programming Guide”,对于为什么不能在init和dealloc方法中使用accessor方法一事,一直不明白。自己平时的工作实践中,貌似也没发现过有啥问题。直到今天,在调试一个错误的时候,才猛然间明白了其中的原因。

之所以不能在init和dealloc中使用accessor,是因为我们要提防:子类有可能会覆盖父类的accessor方法,从而改变accessor方法的行为。

参考代码:

#import <Foundation/Foundation.h>

@interface Test : NSObject
@property (nonatomic, retain) NSString * str;
@end

@implementation Test
- (id)init
{
	self = [super init];
	if(self){
		self.str = @"aaa";
	}
	return self;
}
@end

@interface Test1 : Test
@end

@implementation Test1
- (void)setStr:(NSString *)str
{
	[super setStr: [NSString stringWithFormat:@"[%@]", str]];
}
@end

int main()
{
	@autoreleasepool{
		Test *test = [[Test new] autorelease];
		NSLog(@"test=%@", test.str);

		Test1 *test1 = [[Test1 new] autorelease];
		NSLog(@"test1=%@", test1.str);

		return 0;
	}
}

输出结果:

test=aaa
test1=[aaa]

© 著作权归作者所有

共有 人打赏支持
nswish

nswish

粉丝 12
博文 11
码字总数 3222
作品 1
高级程序员
私信 提问
Objective-C 内存管理

写在前面 本文是阅读 Advanced Memory Management Programming Guide 的笔记。 主要内容是关于手动管理内存的规则。 众所周知,Objective-C 它提供了2种内存管理方式: Manual Retain-releas...

JiandanDream
2018/05/09
0
0
objective-c 关键字和概念

objective-c 关键字和概念 - ithero_zhou的专栏 - 博客频道 - CSDN.NET 关键字 @ 看到这个关键字,我们就应该想到,这是Object-C对C语言的扩展,例如@interface XXX。 @interface 声明类 @i...

绿月
2014/03/21
0
0
objective - c 内存管理机制

版权声明 此文版权归作者VinceYuan (vince.yuan#gmail.com)所有。欢迎非营利性转载,转载时必须包含原始链接http://vinceyuan.cnblogs.com/,且必须包含此版权声明的完整内容。 版本1.1 发表...

雾灵峰
2012/11/12
0
0
iPhone/Mac Objective-C内存管理教程和原理剖析

版权声明 此文版权归作者Vince Yuan (vince.yuan#gmail.com)所有。欢迎非营利性转载,转载时必须包含原始链接http://vinceyuan.cnblogs.com/,且必须包含此版权声明的完整内容。 版本 1.1 发...

黑衣李白
2012/12/27
0
0
iPhone/Mac Objective-C内存管理教程和原理剖析(一)基本原理

iPhone/Mac Objective-C内存管理教程和原理剖析(一)基本原理 [转载] 2010-10-29 15:12 版权声明 此文版权归作者Vince Yuan (vince.yuan#gmail.com)所有。欢迎非营利性转载,转载时必须包含原...

晨曦之光
2012/05/28
27
0

没有更多内容

加载失败,请刷新页面

加载更多

matlab-线性代数 根据二次型写矩阵

  matlab : R2018a 64bit     OS : Windows 10 x64 typesetting : Markdown    blog : my.oschina.net/zhichengjiu    gitee : gitee.com/zhichengjiu   code clearclci=input(......

志成就
22分钟前
1
0
Linux常用命令(六)vi 命令

vi 命令 复制,光标所在的这一行 yy 复制,光标所在行开始向下的4行 4yy 粘贴 p 删除(剪切,用p粘贴),光标所在的这一行 dd 删除(剪切),光标所在行,向下2两行 2dd 从光标开始一直...

GritTan
42分钟前
3
0
nginx 找不到pid文件原因及解决办法

2.var/run/nginx.pid文件 首先 var/run这个目录是干嘛用的? 此文件夹包含描述系统启动以来系统信息的数据。此文件夹下的文件必须在启动过程初期清除(删除或归零)。程序可以在/var/run下有...

李佳顺
今天
4
0
【scala】2.控制结构和函数

简介 在Java或者C++中,我们把表达式和语句看做两种不同的东西。表达式有值,而语句执行动作。 在Scala中,几乎所有构造出来的语法结构都是有值的。这个特性使得程序更加的精简,也更易读。 ...

Areya
今天
5
0
Java中的并发工具类(CountDownLatch、CyclicBarrie、Exchanger)

在JDK的并发包里提供了很多有意思的并发工具类。CountDownLatch、CyclicBarrier和Semaphore 工具类提供了一种并发流程控制的手段,Exchanger 工具类则提供了在线程间交换数据的一种手段。 1....

孟飞阳
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部