为什么 "SecStaticCodeCheckValidity" 方法在钻我的记忆?
Why is the "SecStaticCodeCheckValidity" method drilling my memory?
我有一个验证代码签名的应用程序。我正在使用 SecStaticCodeCheckValidity 检查签名是否有效。在我调用该方法之前,我的内存占用相对较小,但是在该方法执行完毕后,我的内存占用几乎翻了一番,我不知道具体发生在哪里。
OSStatus errorCode=SecStaticCodeCheckValidity(_codeReference, kSecCSConsiderExpiration,NULL);
CFRelease(_codeReference);
switch(errorCode)
{
case errSecInvalidRoot:validity=INVALID;
break;
case errSecCRLNotValidYet:validity=NOT_VALID_YET;
break;
case errSecCertificateRevoked:validity=REVOKED;
break;
case errSecCertificateExpired:validity=EXPIRED;
break;
case errSecSuccess:_signatureValidity=VALID;
break;
default: validity=BROKEN;
break;
}
现在,当我已经发布了“_codeReference
”时,我究竟应该发布什么?
更新:
#import <Foundation/Foundation.h>
#import <Security/Security.h>
int main(int argc, const char * argv[]) {
SecStaticCodeRef codeRef;
CFURLRef appURL=CFURLCreateWithFileSystemPath(kCFAllocatorDefault, CFSTR("/Applications/Xcode.app"), kCFURLPOSIXPathStyle, YES);
SecStaticCodeCreateWithPath(appURL, kSecCSDefaultFlags, &codeRef);
CFRelease(appURL);
CFDictionaryRef signDic;
SecCodeCopySigningInformation(codeRef, kSecCSSigningInformation, &signDic);
if(!CFDictionaryContainsKey(signDic,kSecCodeInfoIdentifier))
{
NSLog(@"Bundle not signed....");
return 0;
}
CFRelease(signDic);
//Verify signature
OSStatus code=SecStaticCodeCheckValidity(codeRef, kSecCSConsiderExpiration, NULL);
CFRelease(codeRef);
NSString*output;
switch(code)
{
case errSecInvalidRoot:output=@"INVALID";
break;
case errSecCRLNotValidYet:output=@"NOT_VALID_YET";
break;
case errSecCertificateRevoked:output=@"REVOKED";
break;
case errSecCertificateExpired:output=@"EXPIRED";
break;
case errSecSuccess:output=@"VALID";
break;
default: output=@"BROKEN";
break;
}
NSLog(@"%@",output);
return 0;
}
我已经更新了我的 SampleApplication 并在 Instruments 中监控了该应用程序。
这意味着我没有在我的代码中正确释放内存。
好的,在我重写我的代码以使用 ARC 之后,所有内存问题都消失了。所以对象没有正确释放实际上是我的错。
我有一个验证代码签名的应用程序。我正在使用 SecStaticCodeCheckValidity 检查签名是否有效。在我调用该方法之前,我的内存占用相对较小,但是在该方法执行完毕后,我的内存占用几乎翻了一番,我不知道具体发生在哪里。
OSStatus errorCode=SecStaticCodeCheckValidity(_codeReference, kSecCSConsiderExpiration,NULL);
CFRelease(_codeReference);
switch(errorCode)
{
case errSecInvalidRoot:validity=INVALID;
break;
case errSecCRLNotValidYet:validity=NOT_VALID_YET;
break;
case errSecCertificateRevoked:validity=REVOKED;
break;
case errSecCertificateExpired:validity=EXPIRED;
break;
case errSecSuccess:_signatureValidity=VALID;
break;
default: validity=BROKEN;
break;
}
现在,当我已经发布了“_codeReference
”时,我究竟应该发布什么?
更新:
#import <Foundation/Foundation.h>
#import <Security/Security.h>
int main(int argc, const char * argv[]) {
SecStaticCodeRef codeRef;
CFURLRef appURL=CFURLCreateWithFileSystemPath(kCFAllocatorDefault, CFSTR("/Applications/Xcode.app"), kCFURLPOSIXPathStyle, YES);
SecStaticCodeCreateWithPath(appURL, kSecCSDefaultFlags, &codeRef);
CFRelease(appURL);
CFDictionaryRef signDic;
SecCodeCopySigningInformation(codeRef, kSecCSSigningInformation, &signDic);
if(!CFDictionaryContainsKey(signDic,kSecCodeInfoIdentifier))
{
NSLog(@"Bundle not signed....");
return 0;
}
CFRelease(signDic);
//Verify signature
OSStatus code=SecStaticCodeCheckValidity(codeRef, kSecCSConsiderExpiration, NULL);
CFRelease(codeRef);
NSString*output;
switch(code)
{
case errSecInvalidRoot:output=@"INVALID";
break;
case errSecCRLNotValidYet:output=@"NOT_VALID_YET";
break;
case errSecCertificateRevoked:output=@"REVOKED";
break;
case errSecCertificateExpired:output=@"EXPIRED";
break;
case errSecSuccess:output=@"VALID";
break;
default: output=@"BROKEN";
break;
}
NSLog(@"%@",output);
return 0;
}
我已经更新了我的 SampleApplication 并在 Instruments 中监控了该应用程序。
好的,在我重写我的代码以使用 ARC 之后,所有内存问题都消失了。所以对象没有正确释放实际上是我的错。