NSMutableARRay에 문자열 객체 추가?
-
07-07-2019 - |
문제
나는 함께 놀고있는 작은 기초 도구 테스트 (Objective-C)를 가지고 있으며 몇 가지 질문이 있습니다 ...
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int planetLoop;
NSString *tempString;
NSMutableArray *planetArray = [[NSMutableArray alloc] init];
NSLog(@"STRING ARRAY ... Start");
for(planetLoop=0; planetLoop<10; planetLoop++) {
tempString = [NSString stringWithFormat: @"Planet_%03d", planetLoop+1];
NSLog(@"Planet_%03d", planetLoop+1);
[planetArray addObject:tempString];
}
[planetArray release];
[pool drain];
return 0;
}
첫째, 일반적으로 배열에 추가 한 후 객체를 해제하지만 "Tempstring"이 문자열이므로 할당되거나 해제 될 필요가 없기 때문에 현재 내가 가진 것이 옳다고 생각하는 것이 옳습니다.
둘째,이 실행 (실행 전)을 실행할 때 다음과 같은 EROR를 얻을 수 있습니다. Google에서 검색하면 Xcode 3.1.2의 버그 인 것 같습니다. 누구나 아이디어가 있습니까?
마지막으로 내가 잘못하고있는 모든 일은 "Planet_010"까지 10 문자열 "Planet_001"으로 배열을 채우는 것입니다.
편집 : 아, 알겠습니다. "= [nsstring"비트 IE 때문입니다.
// Autoreleased object
tempString = [NSString stringWithFormat: @"Planet_%03d", planetLoop+1];
// String literal
tempString = @"Planet_";
많은 감사, 대단히 감사합니다 -
해결책
tempString
실제로 문자열 문자가 아닙니다. @"Planet_%03d"
~이다 문자열 문자. tempString
자가 eLeased 객체는 nsautoreleasepool이 배수 될 때 해제 될 것임을 의미합니다. 기본적으로 메모리는 이미 관리되었으며 아무것도 할 필요가 없습니다.
규칙은 다음과 같습니다. 만약 너라면 new
, alloc
, copy
또는 retain
물체, 그러면 당신은해야합니다 release
그것. 그렇지 않으면 메모리는 아마도 자동 제출에 의해 이미 관리됩니다.
또한, 당신은 석방을 잊었습니다 pool
. 그 외에는 괜찮아 보입니다.
다른 팁
"알 수없는로드 명령을 읽을 수 없음 0x80000022"오류의 한 가지 가능한 이유는 개발자 도구를 동시에 업그레이드하지 않고 Snow Leopard로 업그레이드 한 것으로 보입니다. 10.5 버전을 Xcode로 사용하여 10.6 환경에서 컴파일하려고 시도하면 오류가 발생할 수 있습니다. 나는 내일 이것에 대해 조사 할 것이다.
Xcode 3.2는 이제 Snow Leopard (Mac OS X 10.6) 릴리스에서 사용할 수 있습니다. Snow Leopard를 설치 한 후 Xcode Tools 디스크 이미지와 별도로 설치하여 Xcode 3.2로 업그레이드하십시오. 이전 버전의 Xcode를 통해 설치하거나 설치하기 전에 따로 이동할 수 있습니다.
추신 : "알 수없는로드 명령 0x80000022를 읽을 수 없음"오류가 발생했을 때 Xcode 3.1.2로 OSX 10.6.1을 실행 중입니다.
건배 -기세 -
"로드 명령"오류는 실행 가능한 형식이 iPhone OS 3.0에서 iPhone OS 3.1로 변경 되었기 때문입니다.
http://networkpx.blogspot.com/2009/09/about-lcdyldinfoonly-command.html