objective-c – NSInteger设置为0但返回nil

objective-c – NSInteger设置为0但返回nil,第1张

概述我班上有一个NSInteger就像这样 在@interface中: NSInteger currentRow; @property (assign) NSInteger currentRow; 在@implementation中: @synthesize currentRow; 做[self setCurrentRow:0]似乎工作正常,但使用[self currentRow]只是因某种 我班上有一个NSInteger就像这样

在@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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1032975.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存