• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Objective C and C++
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Objective C and C++


  • Subject: Re: Objective C and C++
  • From: Brian Willoughby <email@hidden>
  • Date: Sun, 21 Dec 2008 23:50:57 -0800

AudioStreamBasicDescription is merely a struct, and it carries no enforced behavior with it. As Bill often points out when someone here has a problem creating a valid AudioStreamBasicDescription, CAStreamBasicDescription is a C++ object which carries code with it that will create consistent field values for you. You don't get any of that automatic help if you're not using C++. It's not impossible to get it right on your own, but you'll get little support if you take that route.

As for mixing C++ and ObjC with no problems and no overhead, that's not exactly true. If all of your code is compiled in one project, that's probably not a problem. However, if you are trying to create a Framework for audio, and you want to support ObjC and Standard C for projects which do not involve any C++ at all, then you get into a situation where your headers and ObjC objects cannot reference any C+ + objects, or else the C++ name-mangling will destroy certain clients of your Framework.

Also, C++ does have a certain amount of hidden overhead in its compile-time code generation. ObjC shifts this sort of thing to the run-time, but ObjC++ has both the compile-time code generation overhead of C++ and the run-time overhead of ObjC. It's not the sort of thing that affects every program written in ObjC++, but it's a far cry from "zero overhead." Again, the overhead is quite minimal, but it is not non-existent.

Brian Willoughby
Sound Consulting


On Dec 21, 2008, at 23:32, tahome izwah wrote:

Actually, all the CA... files contain C++ code, not just
CAStreamBasicDescription. You can still use a "regular"
AudioStreamBasicDescription if you don't want to deal with C++ at this
point, though I fail to see what difference this would make (if you
rename the Cocoa files properly you can mix C++ and ObjC with no
problems and zero overhead).

--th


2008/12/22 Brian Willoughby <email@hidden>:
Nick has a good point. CoreAudio and CoreMIDI are C API, so you don't need
anything fancy at all. ObjC is a superset of C, so every CoreAudio/ MIDI
call can be made from a normal Cocoa source file. No C++ needed.


The only potential need for C++ that I have run into is the
CAStreamBasicDescription object. It's very handy, but I usually just make
do without it. Sometimes it's more trouble to get C++ to mix in a Cocoa
than to simply roll your own description structures. Now that I think about
it, Apple should rewrite CAStreamBasicDescription as C (if possible) or make
an ObjC variant available. That would save a lot of Cocoa developers from
needless hassle.
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Coreaudio-api mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden


  • Follow-Ups:
    • Re: Objective C and C++
      • From: "tahome izwah" <email@hidden>
References: 
 >Objective C and C++ (From: Brian Hughes <email@hidden>)
 >Re: Objective C and C++ (From: Marc Vaillant <email@hidden>)
 >Re: Objective C and C++ (From: NickMtl <email@hidden>)
 >Re: Objective C and C++ (From: Brian Willoughby <email@hidden>)
 >Re: Objective C and C++ (From: "tahome izwah" <email@hidden>)

  • Prev by Date: Re: Objective C and C++
  • Next by Date: Re: Objective C and C++
  • Previous by thread: Re: Objective C and C++
  • Next by thread: Re: Objective C and C++
  • Index(es):
    • Date
    • Thread