On Thu, 17 Apr 2014 15:55:10 -0400, Walter Bright <newshou...@digitalmars.com> wrote:

On 4/17/2014 12:41 PM, Steven Schveighoffer wrote:
On Thu, 17 Apr 2014 14:47:00 -0400, Walter Bright <newshou...@digitalmars.com>
wrote:

On 4/17/2014 10:05 AM, Steven Schveighoffer wrote:
Obj-C only uses ARC for a minority of the objects.
Really? Every Obj-C API I've seen uses Objective-C objects, which all use RC.

And what about all allocated items?

What do you mean?

Can you call malloc() ?

Of course. And then I can wrap it in NSData or NSMutableData.

A UI is a good use case for ARC. A UI doesn't require high performance.
I've written video processing/players on iOS, they all use blocks and reference counting, including to do date/time processing per frame. All while using RC
network buffers. And it works quite smoothly.

And did you use ref counting for all allocations and all pointers?

Yes.

You never used malloc? for anything? or stack allocated anything? or had any pointers to anything that weren't ref counted?

How did that work for printf?

I didn't exactly use printf, iOS has no console. NSLog logs to the xcode console, and that works great.

But we used FILE * plenty. And I've had no problems.

There's no doubt that ref counting can be used successfully here and there, with a competent programmer knowing when he can just convert it to a raw
pointer and use that.

The compiler treats pointers to NSObject-derived differently than pointers to
structs and raw bytes.

So there *are* regular pointers.

Of course, all C code is valid Objective-C code.

There is no need to know, you just use them like normal
pointers, and the compiler inserts the retain/release calls for you.

I know that with ARC the compiler inserts the code for you. That doesn't make it costless.

I'm not saying it's costless. I'm saying the cost is something I didn't notice performance-wise.

But my point is, pointers are pointers. I use them the same whether they are ARC pointers or normal pointers (they are even declared the same way), but the compiler treats them differently.

And remember that if you have exceptions, then all the dec code needs to be in
exception unwind handlers.

I haven't really used exceptions, but they automatically handle the reference
counting.

I know it's done automatically. But you might be horrified at what the generated code looks like.


Perhaps a reason to avoid exceptions :) I generally do anyway, even in D.

-Steve

Reply via email to