나를 위해 특정 Safari 쿠키를 삭제하는 작은 CLI 프로그램을 작성했습니다. 기능적으로는 괜찮지 만 오브젝트에 대한 경고는 "풀에서 풀을 사용하지 않고 자동 렌더링"된다는 것입니다. 내 프로젝트에 ARC가 사용 설정되어 있으므로 자동 풀이없는 이유는 무엇입니까?ARC를 사용할 때 자동 복구 오류가 발생하는 이유는 무엇입니까?
// NSLog replacement from http://stackoverflow.com/a/3487392/1376063
void IFPrint (NSString *format, ...) {
va_list args;
va_start(args, format);
fputs([[[NSString alloc] initWithFormat:format arguments:args] UTF8String], stdout);
fputs("\n", stdout);
va_end(args);
}
int main(int argc, const char * argv[])
{
NSString *urlSearchString;
if (argc > 1) {
urlSearchString = [[NSString alloc] initWithUTF8String:argv[1]];
}
else {
IFPrint(@"No URL provided, quitting.");
return 1;
}
NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSString *filterString = [[NSString alloc] initWithFormat:@"domain ENDSWITH '%@'", urlSearchString];
NSPredicate *filter = [NSPredicate predicateWithFormat:filterString];
NSArray *matchedCookies = [cookieStorage.cookies filteredArrayUsingPredicate:filter];
for (int i = 0; i < matchedCookies.count; i++) {
[cookieStorage deleteCookie:[matchedCookies objectAtIndex:i]];
}
IFPrint(@"Removed %li cookies", matchedCookies.count);
return 0;
}
내가 할 메시지는 다음과 같습니다 : 여기
내 코드의 직접 (약간의 여담을 릴리스 바이너리를 실행할 때 엑스 코드 디버거에 나타납니다 또는objc[15502]: Object 0x107b2bf00 of class NSThread autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool() to debug
:해야하지 이러한 메시지가 "릴리스"빌드에서 제거해야합니까?). I '는 IFPrint
기능에서 온 나타납니다
objc[15630]: Object 0x100114ed0 of class __NSCFString autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool() to debug
objc[15630]: Object 0x100114f80 of class __NSCFData autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool() to debug
: 나는 비슷한 메시지가
NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
마찬가지로, 내가 인수를 전달하지 않고 그것을 실행하는 경우 : 그것을 일으키는 줄은 것 같다 내가 올바른 인수를 제공 할 때 IFPrint
을 사용할 때 이것은 표시되지 않습니다.
나는 여기서 내 깊이를 벗어났다. 누군가 내가 어디로 (그리고 어떻게) 잘못 갔는지를 보여줄 수 있는가?
모두가 말했듯이, 당신은 당신의 메인에'autorelease' 풀이 필요합니다. 그러나 문제는 처음에 어떻게 삭제되었는지입니다 (일어난 경우). 또한, 메인에서 물건을 가져 와서'findAndDeleteMatchedCookies'와 같은 메소드를 사용하는 것을 고려하십시오. –