iPhone“;计数“;挫折?
好吧,我知道我肯定错过了一些明显的东西。下面是示例代码(当在viewDidLoad块中执行时,它会自动崩溃…没有错误输出到调试控制台) 我错过了什么iPhone“;计数“;挫折?,iphone,objective-c,ios,memory-management,string-formatting,Iphone,Objective C,Ios,Memory Management,String Formatting,好吧,我知道我肯定错过了一些明显的东西。下面是示例代码(当在viewDidLoad块中执行时,它会自动崩溃…没有错误输出到调试控制台) 我错过了什么 哦。。。如果有人想知道,这段代码只是我在试图弄清楚为什么我不能得到在程序中其他地方真正重要的NSMutableArray的计数。[mutableArray count]返回一个整数。在NSLog中,指定%@,这需要NSString。Obj-C不会自动将整数转换为字符串,因此您需要使用: NSLog(@"%u", [bs count]); // Us
哦。。。如果有人想知道,这段代码只是我在试图弄清楚为什么我不能得到在程序中其他地方真正重要的NSMutableArray的计数。[mutableArray count]返回一个整数。在NSLog中,指定%@,这需要NSString。Obj-C不会自动将整数转换为字符串,因此您需要使用:
NSLog(@"%u", [bs count]); // Uses %u specifier which means unsigned int
学习如何使用字符串格式。这里有一个链接:您还将释放一个已自动释放的对象。根据经验,永远不要对对象调用release/autorelease,除非您自己也对其执行了alloc/retain/copy。大多数情况下,从其他类方法获得的对象已经为您自动释放,因此您不应该再进行另一次释放。不要在最后释放它
arrayWithCapacity:10
返回一个autorelease
d对象,这意味着它将在以后自动释放。自己发布意味着它的计数将转到-1
,不愉快的事情将发生!(正如你所发现的)
一般来说,包含单词
alloc
或copy
的方法返回的对象必须由您释放,但不能由其他人释放!(当然,除非您先保留它们)实际上%@不需要NSString,它适用于任何objective-c对象,包括NSString。%@
不仅适用于objective-c对象,还适用于CFTypeRef对象。对于ObjtoE-C对象,使用<代码> >描述<代码>的结果被使用(或<代码>描述符与区域设置:< /代码>如果它存在),对于核心基础类型,它是调用<代码> CFCopeDebug < /代码>的结果。%@将不与NSUInteger一起工作,因为这不是对象。根据iPhone操作系统标题:------typedef unsigned int-integer----
NSLog(@"%u", [bs count]); // Uses %u specifier which means unsigned int