试图为 NSArray 创建类,但不明白为什么线程stalls/breaks
Trying to create a category for NSArray, but do not understand why the thread stalls/breaks
我正在尝试学习 treehouse 团队在 objective-C 上的课程。
这部分课程试图教我们实现类别。所以我有下面的代码
main.m
#import <Cocoa/Cocoa.h>
#import "NSArray+mahem.h"
int main()
{
NSArray *letters = @[ @"alfa", @"bravo", @"charlie"];
NSLog(@"letters %@", letters);
NSLog(@"cap %@", [letters capitalizeStrings]);
return 0;
}
NSArray+mahem.h
#import <Foundation/Foundation.h>
@interface NSArray (mahem)
-(NSArray *)capitalizeStrings;
@end
NSArray+mahem.m
#import "NSArray+mahem.h"
@implementation NSArray (mahem)
-(NSArray *)capitalizeStrings{
NSMutableArray *cap = [NSMutableArray array];
for (NSString *string in self) {
[cap addObject:[string capitalizedString]];
}
return cap;
}
@end
基本上,我试图将 NSArray letters
中的每个单词大写。但是,当我在xcode6中运行main.m时,程序到达文件NSArray+mahem.m
中的for (NSString *string in self) {
行处的断点。
我以前从未使用过 xcode 调试器,所以我不确定我看到了什么或我应该如何解决这个问题。好像说self
确实有3个对象(@"alfa"、@"bravo"、@"charlie"),但是cap
有0个,而string
显然等于 0xa1a1a1a1。我假设这意味着它在第一个循环中就中断了,否则 cap
至少会有一个对象。为什么 string
会出现乱码?
这是因为 NSArray 是常量而不是可变的吗?我该如何解决?如果有人可以向我解释这一点,那将非常有帮助。谢谢
根据您的描述,一切正常。当执行流到达字符串 for (NSString *string in self) {
您的 self
数组已完全填充 - 它是先前在 main()
中创建的
您的 cap
已声明并初始化,但未填充 - for
循环未执行一次。
您的 string
已声明但未初始化 - 它存在,但指向内存中的某个随机位置。它没有坏。如果您将跨过调试器,您会看到 string
变成了 @"alpha"
,但 cap
仍然是空的。再向前一步 - string
仍然是 @"alpha"
并且 cap
填充了一个对象。
一切正常。有什么不明白的地方欢迎提问
我正在尝试学习 treehouse 团队在 objective-C 上的课程。
这部分课程试图教我们实现类别。所以我有下面的代码
main.m
#import <Cocoa/Cocoa.h>
#import "NSArray+mahem.h"
int main()
{
NSArray *letters = @[ @"alfa", @"bravo", @"charlie"];
NSLog(@"letters %@", letters);
NSLog(@"cap %@", [letters capitalizeStrings]);
return 0;
}
NSArray+mahem.h
#import <Foundation/Foundation.h>
@interface NSArray (mahem)
-(NSArray *)capitalizeStrings;
@end
NSArray+mahem.m
#import "NSArray+mahem.h"
@implementation NSArray (mahem)
-(NSArray *)capitalizeStrings{
NSMutableArray *cap = [NSMutableArray array];
for (NSString *string in self) {
[cap addObject:[string capitalizedString]];
}
return cap;
}
@end
基本上,我试图将 NSArray letters
中的每个单词大写。但是,当我在xcode6中运行main.m时,程序到达文件NSArray+mahem.m
中的for (NSString *string in self) {
行处的断点。
我以前从未使用过 xcode 调试器,所以我不确定我看到了什么或我应该如何解决这个问题。好像说self
确实有3个对象(@"alfa"、@"bravo"、@"charlie"),但是cap
有0个,而string
显然等于 0xa1a1a1a1。我假设这意味着它在第一个循环中就中断了,否则 cap
至少会有一个对象。为什么 string
会出现乱码?
这是因为 NSArray 是常量而不是可变的吗?我该如何解决?如果有人可以向我解释这一点,那将非常有帮助。谢谢
根据您的描述,一切正常。当执行流到达字符串 for (NSString *string in self) {
您的
self
数组已完全填充 - 它是先前在main()
中创建的
您的
cap
已声明并初始化,但未填充 -for
循环未执行一次。您的
string
已声明但未初始化 - 它存在,但指向内存中的某个随机位置。它没有坏。如果您将跨过调试器,您会看到string
变成了@"alpha"
,但cap
仍然是空的。再向前一步 -string
仍然是@"alpha"
并且cap
填充了一个对象。
一切正常。有什么不明白的地方欢迎提问