GUI program on Mac OS in D?
Jacob Carlborg
doob at me.com
Mon Feb 5 19:44:37 UTC 2018
On 2018-02-05 16:49, mrphobby wrote:
> I've been playing around with this a bit and it works pretty well. One
> thing that bothers me is the handling of NSString. I came up with the
> following class to handle strings and make sure they do not leak. But
> maybe there is a nicer way to handle this in D?
Note that this applies to all classes, not just NSString.
> class NSStringRef {
> public:
> this(string s) {
> str_ = NSString.alloc.initWithBytes(cast(immutable(ubyte)*) s.ptr,
> s.length,
> NSStringEncoding.NSUTF8StringEncoding);
> }
>
> ~this() {
> str_.release();
> }
Note that this is not deterministic. There's not even a guarantee that a
destructor for a class will be run at all.
> NSString str() @property {
> return str_;
> }
>
> private:
> NSString str_;
> }
>
> And then you have to use it like this:
>
> NSStringRef s = new NSStringRef("Hello");
> NSLog(s.str);
You can add an "alias this" [1] to avoid calling "str" explicitly.
> Ideally I would like to write code more like this (without leaking the
> NSString):
>
> NSLog("Hello".nsstring);
>
> Surely this must be possible in D somehow? :)
Currently the only correct way would be to wrap the class in a struct.
There as been some talk to extend the language to support for reference
counted classes [2].
[1] https://dlang.org/spec/class.html#alias-this
[2] https://wiki.dlang.org/DIP74
--
/Jacob Carlborg
More information about the Digitalmars-d-learn
mailing list