On Jan 26, 2012, at 4:12 AM, Arved von Brasch wrote:

> - (NSString *)usedSpace {
>       NSDictionary *systemInfo = [[NSFileManager defaultManager] 
> attributesOfFileSystemForPath: [[NSBundle mainBundle] bundlePath] error: nil];
>       NSDecimalNumber *total = [NSDecimalNumber decimalNumberWithString: 
> [[systemInfo objectForKey: NSFileSystemSize] stringValue]];
>       NSDecimalNumber *avail = [NSDecimalNumber decimalNumberWithString: 
> [[systemInfo objectForKey: NSFileSystemFreeSize] stringValue]];
>       return [self humanReadableNumber: [total decimalNumberBySubtracting: 
> avail]];
> }

First, why are you using strings to convert to NSDecimalNumber?  Ask the 
NSNumber for its decimalValue and then use +[NSDecimalNumber 
decimalNumberWithDecimal:].  That avoids formatting and parsing of strings.

Second, why do you need NSDecimalNumber?  Can you not use either unsigned long 
long or double for this purpose?


> This problem seems to depend on the compilation order.  Commenting out the 
> offending code, recompiling, then restoring the code and recompiling makes 
> the problem go away.  Performing a Clean operation than recompiling makes the 
> problem reappear.  This suggests compilation order affects whether the 
> systemInfo dictionary has valid elements or not at runtime.

I doubt that.  Probably, you have an uninitialized variable or stack smashing 
bug somewhere and the compilation order affects the layout of the stack which 
changes either what garbage is in the uninitialized variable or what on the 
stack gets smashed.

Certainly, you can log the values you get from systemInfo to check your 
hypothesis.


> As to why @dynamic is there, I thought that was the proper way to implement a 
> property where the implementation was supplied by me rather than synthesised. 
>  Is that not the case?

You don't need @dynamic for properties where you supply the accessors at 
compilation time.  It's only necessary for when the accessors aren't apparently 
available but will be at runtime.  For example, by dynamically loading a 
category or self-modifying code.  (NSManagedObject uses something like the 
latter.)

Regards,
Ken


_______________________________________________

Cocoa-dev mailing list ([email protected])

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to