在@interface中:
NSInteger currentRow; @property (assign) NSInteger currentRow;
在@implementation中:
@synthesize currentRow;
做[self setCurrentRow:0]似乎工作正常,但使用[self currentRow]只是因某种原因返回null,不知道为什么.当使用断点时,我可以看到currentRow的值为0,因此设置正常,但我无法获得该值.
解决方法 在Objective-C中,区分对象和基本类型很重要.对象始终存储为指针,该指针是对象在内存中的位置.指针只是一个数字.使用NSLog,您可以使用%p来查看此值.您也可以在调试器中显示它,如下所示:print myObject.指针显示为十六进制数字,带有0x前缀. nil基本上是位置零(0x0000).当你分配任何类型的对象时,你会得到一个非零的指针.将对象分配给变量时,只需复制内存地址,而不是复制对象.使用NSLog,您可以使用%@打印对象的描述.在调试器中,如下所示:print-object myObject.
像NSInteger这样的原始类型不是对象.通常只存储值,而不是存储指针.分配NSInteger变量时,可以复制该值.您可以使用print在调试器中查看值.或者像这样:NSLog(“%ld”,(long)currentRow).分配基元时,复制其值.不要将%@或print-object与原语一起使用 – 它们需要对象.
(我说“通常你只是存储值”,因为你也可以指出原始类型的指针.在像你这样的情况下,它是没有必要的.)
[self currentRow]返回0,就像你设置它一样. (此外,因为Objective-C保证实例变量的初始化,即使你没有设置它也会返回0.)
问题是你期望一个指向对象的指针.如何修复代码取决于您使用它的方式:
>如果您正在使用print-object currentRow,请将其更改为print currentRow.>如果您正在使用NSLog(“%@”,currentRow),请将其更改为NSLog(%“ld”,(long)currentRow).>如果您在需要对象的其他地方使用currentRow,请将实例变量和属性类型更改为NSNumber *,即对象类型.使用[self setCurrentRow:[NSNumber numberWithInt:0]]设置它.
总结以上是内存溢出为你收集整理的objective-c – NSInteger设置为0但返回nil全部内容,希望文章能够帮你解决objective-c – NSInteger设置为0但返回nil所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)