I would like to define a static function which returns a newly created object, 
for example:

static Foo* makeFoo(const char* arg) {
  return [[Foo alloc] initWithArg:arg];
}


Do I need to use __attribute__((ns_returns_retained)), or is the above 
definition already correct as it is?



Furthermore, are ARC rules fully applied within static functions and free 
functions? For example:

Foo*  makeFoo(const char* str) __attribute__((ns_returns_retained));
Foo*  makeFoo(const char* str) {
    NSString* s = [[NSString alloc] initWithCString:str encoding:Encoding];
    Foo* result = [[Foo alloc] initWithString:s];
    return result;
}

Is local variable 's' released properly?




Furthermore is ARC fully applied within member functions of C++ classes? 
For example:

// Objective-C++
#import "Foo.h"

class foo {
public:
    foo(const std::string& s = "default") : _s(s) {}

    Foo* makeFoo() const {
        NSString* s = [[NSString alloc] initWithCString:_s.c_str() 
encoding:Encoding];
        Foo* result = [[Foo alloc] initWithString:s];
        return result;
    }

private:
    std::string _s;
};

…

#include "foo.h"
@implementation Bar {
    foo _foo;
}
- (Foo*) newFoo {
    return _foo.makeFoo();
}
@end


If that works, how would I have to declare the C++ member function makeFoo(), 
considering two cases:
1) makeFoo is inlined and defined within the class definition 
2) makeFoo is defined out of line within a foo.cpp module



Thanks for help!


Regards
Andreas
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

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 arch...@mail-archive.com

Reply via email to