I have a trouble about the different behavior with 'Debug' and 'Release' Build Configuration.
In my application, there is a implementation like below.
In 'Release' build, the argument is disappeared(as null) in 'functionB'. I can't understand the reason.
- (void)functionA
{
...
Arg1* arg1 = nil;
arg1 = [[Arg1 alloc] init];
arg1.porperty1 = a;
arg1.property2 = b;
arg1.property3 = c;
...
[ObjX functionB: ... :(Arg1*)arg1, ...];
...
arg1 release];
}
- (void)functionB: ... :(Arg1*)aArg1, ...
{
NSLog(@"aArg1.propperty1=%@, aArg1.property1);
NSLog(@"aArg1.propperty2=%@, aArg1.property2);
NSLog(@"aArg1.propperty3=%@, aArg1.property3);
// -> In Debug Build, the output is "a", b" and "c".
// -> But in Release Build the output is (null) (null) (null)
}
In 'Debug' build, I can get the correct value of the argument("a", "b" and "c").
I tried changing 'Optimization Level' of LLVM(Compiler) for 'Release' build, from 'Fastest, Smallest [-Os]' to 'None [-O0]'(same as 'Debug' build).
The result is correct, I could get expected value from the argument("a", "b" and "c")
Please tell me if you know, is this a failure in my code ? or is this a spec or bug of LLVM(Compiler) ?
Thank you.