【发布时间】:2018-09-13 13:01:39
【问题描述】:
我在 iOS 下,我正在使用 delphi Tokyo 进行开发,这是我的代码:
aUIImage := TUIImage.Wrap(TUIImage.alloc.initWithCGImage(aCGImageRef));
try
aData := TNSData.Wrap(UIImageJPEGRepresentation((aUIImage as ILocalObject).GetObjectID, cWin_DefaultJPGCompressionRate / 100));
try
aWorkPicStream.WriteBuffer(aData.bytes^, aData.length);
finally
aData.release; // << this make my code will crash (later not now)
end;
finally
aUIImage.release;
end;
在执行之前的代码之后我在执行的稍晚时出现了这个错误:
myproj [E][W][I][D][V] Error => Access violation at address 0000000184D4891C, accessing address 0000000107FD286C
At address: $0000000184D4891C (objc_msgSend + 28)
Call stack:
myproj $0000000103E00548 Grijjy.Errorreporting.TgoExceptionReporter.GlobalGetExceptionStackInfo(TExceptionRecord*) + 196
myproj $00000001030DF0EC Sysutils.Exception.RaisingException(TExceptionRecord*) + 88
myproj $0000000103116164 Sysutils.RaiseExceptObject(TExceptionRecord*) + 84
myproj $00000001030BB498 _RaiseAtExcept(TObject*, Pointer) + 128
myproj $00000001030DD900 Internal.Excutils.SignalConverter(NativeUInt, NativeUInt, NativeUInt) + 68
libobjc.A.dylib $0000000184D5213C <redacted> + 844
CoreFoundation $0000000185A40AAC _CFAutoreleasePoolPop + 28
Foundation $00000001864FB960 <redacted> + 148
myproj $00000001031B426C Classes.ThreadProc(Classes.TThread*) + 948
myproj $00000
如果我评论 aData.release; 行,那么我不会遇到任何错误。
为什么?如何知道什么时候必须调用 release 什么时候不能调用 release ?
【问题讨论】:
-
@RudyVelthuis 好的,但是这样为什么 aUIImage.release;不要引发任何错误?
-
@RudyVelthuis :不幸的是,原始文档什么也没说:(
标签: ios delphi firemonkey