self使用时,导致死循环的的一个初级错误
2015-03-16 20:01
357 查看
首先错误代码是这样的。
由于受之前C++编程习惯的影响,写了上面的错误代码。当有一个实例Test* pTest调用,比如[pTest setNumber] 会导致死循环。因为self是指针类型,self.Number 其实是相当于调用一次[self setNumber],是一次函数调用。 而self->Number才是真正的直接对成员变量赋值。谨记。
#import <Foundation/Foundation.h> @interface Test : NSObject { int number; } -(int) Number; -(void) setNumber: (int) value; -(void) TraceNumber; @end @implementation Test -(int) Number { return number; } -(void) setNumber: (int) value { self.number = value; } -(void) TraceNumber { NSLog(@"number is %i", self.Number); } @end
由于受之前C++编程习惯的影响,写了上面的错误代码。当有一个实例Test* pTest调用,比如[pTest setNumber] 会导致死循环。因为self是指针类型,self.Number 其实是相当于调用一次[self setNumber],是一次函数调用。 而self->Number才是真正的直接对成员变量赋值。谨记。
相关文章推荐
- 一个很初级的错误 Destructor忘记override导致内存泄露
- ajax缓存导致的一个错误,使用时间戳完美解决
- java工程项目里,在一个包里面,不能出现同名的类名,这问题是刚接触java才会遇到的,特别是新手一般都没有建立包,而是使用默认的,易出现同名的类名,导致eclipse提示错误
- map[]的正确使用:自以为是导致map的一个错误使用
- 一个由于错误使用interval导致的错误
- Entity Framework 使用Code First 处理多个表关系时的错误 “将 FOREIGN KEY 约束 'FK_dbo.' 引入表 ' ' 可能会导致循环或多重级联路径”
- java工程项目里,在一个包里面,不能出现同名的类名,这问题是刚接触java才会遇到的,特别是新手一般都没有建立包,而是使用默认的,易出现同名的类名,导致eclipse提示错误
- java工程项目里,在一个包里面,不能出现同名的类名,这问题是刚接触java才会遇到的,特别是新手一般都没有建立包,而是使用默认的,易出现同名的类名,导致eclipse提示错误
- Winpcap不同版本之间的一个小差异导致的错误。
- 使用JNDI的一个容易忽略的错误
- 使用JNDI的一个容易忽略的错误
- asp:(0X80004005)操作必须使用一个可更新的查询”错误的解决办法
- 错误提示:操作必须使用一个可更新的查询
- 使用STL时的一个链接错误(error LNK2005:std::_Lockit::_Lockit(int)重定义)
- 分析器错误信息: 在应用程序级别以外使用注册为 allowDefinition='MachineToApplication' 的节是错误的。导致该错误的原因可能是在 IIS 中没有将虚拟目录作为应用程序进行配置。
- Access中"操作必须使用一个可更新的查询"错误的解决办法
- 在jsp中使用FCKeditor的一个错误
- 使用NHibernate时产生的一个错误
- 一个典型的事务使用错误分析
- Access里的错误-操作必须使用一个可更新的查询