self.memeber 和 memeber调用 产生的异同
来源:互联网 发布:有限元软件比较 编辑:程序博客网 时间:2024/05/29 09:16
#import <Foundation/Foundation.h>#import "A.h"@interface B : NSObject { A* m_a; }@property (nonatomic, retain) A* m_a;- (void) test;@end
#import "B.h"@implementation B@synthesize m_a;- (void) test{ A* pa = self.m_a; NSLog(@"%@", [pa description]);}- (A*) m_a{ NSLog(@"m_a is created by function."); return m_a;}@end
通过上面的代码,能否发现,test函数内 self.m_a 是会执行 m_a函数的,如果直接使用m_a是不会执行此函数的。
注意:同时如果不使用self调用成员变量,那仅仅是赋值,也不会发生默认的函数 retain的。很危险啊。
所以一般情况下 一定要使用self.memeber来调用,这是规矩啊。
但是上面的的代码 一定要注意 可能产生循环调用的问题。如果
- (A*) m_a 函数改成下面的
- (A*) m_a{ NSLog(@"m_a is created by function."); return self.m_a;}
就会产生循环调用 m_a的问题。因为 self.m_a 会一直调用 -(A*) m_a函数, 无限递归了。
再 增加一点。
比如:
self.a = [[A alloc] init];
和 m_a =[ [A alloc] init];
的差别很大,第一个A 的retain count 是 2。第二个是1。 因为第一个会产生一个临时变量,相当于下面的代码:
A* tempA = [[A alloc] init]; 然而 这个tempA并没有释放 所以导致self.a使retain count 是2。 而第二个是赋值操作(assign)所以不会增加retain count。
- self.memeber 和 memeber调用 产生的异同
- link 2005 - static memeber
- [HeadFirst] Static Memeber & Final Rules
- C++ virtual constructors virtual copy constructors 以及non-memeber functions的行为虚化
- 条款23:宁以non-memeber,non-friend替换member函数
- 通过self调用propery和直接调用propery的区别
- performSelector调用方法和直接self 调用方法的区别
- self调用属性和直接下划线调用属性的区别
- [Ruby笔记]26. self 不变,每一次调用函数都会产生新的local scope
- 调用方式__cdecl和__stdcall的异同点
- JavaScript:new 一个函数和直接调用函数的异同
- new 一个函数和直接调用函数的异同
- php的self关键字和静态方法调用
- avr串口通信和定时器产生矛盾(两种中断方法声明的异同)
- &和&&的异同
- Swift3.0 Self和self的区别
- VS2010产生C的dll方法和C#调用方式
- OC中类的Self 和 Super调用方法的本质
- 淘宝笔试归来
- statusbar上根据不同语言,添加PM,AM,或者上下午
- 类模板模板类 函数模板模板函数
- JSON
- 【led】djyos下基于tq2440开发板上跑马灯实验
- self.memeber 和 memeber调用 产生的异同
- final, finally, finalize的区别?
- const int *p,const * int p,int const *p
- JSON
- java学习笔记(十四)
- telnet ,netstat ,ping
- 带箭头的listbox
- java学习笔记(十五)
- ajax与json