あるソース・ファイルをARC対応する際に困っています。
NSStringのインスタンス変数hogeが宣言されています。
Objective
1@interface SampleClass : NSObject{ 2 NSString hoge; 3} 4 5hoge = [(NSString *)fuga retain];
という形で代入され使われている行がありました。
ARCに対応するには単純にretainを外して、このようにしてしまって良いのでしょうか?
Objective
1hoge = (NSString *)fuga; 2
hogeが勝手に開放されないか不安です。
また外部クラスからhogeをアクセスすることはないようなので、プロパティにするのもおかしいのかなと思っていますがどうなのでしょうか?
追記:
具体的なソース(GDataXMLNode)を追記します。
hogeに当たるのがcachedName_で、ヘッダーファイル内で宣言されています。
Objective
1- (NSString *)qualifiedName { 2 // internal utility 3 4 NSString *str = nil; 5 6 if (xmlNode_ != NULL) { 7 if (xmlNode_->type == XML_NAMESPACE_DECL) { 8 9 // name of a namespace node 10 xmlNsPtr nsNode = (xmlNsPtr)xmlNode_; 11 12 // null is the default namespace; one is the loneliest number 13 if (nsNode->prefix == NULL) { 14 str = @""; 15 } 16 else { 17 str = [self stringFromXMLString:(nsNode->prefix)]; 18 } 19 20 } else if (xmlNode_->ns != NULL && xmlNode_->ns->prefix != NULL) { 21 22 // name of a non-namespace node 23 24 // has a prefix 25 char *qname; 26 if (asprintf(&qname, "%s:%s", (const char *)xmlNode_->ns->prefix, 27 xmlNode_->name) != -1) { 28 str = [self stringFromXMLString:(const xmlChar *)qname]; 29 free(qname); 30 } 31 } else { 32 // lacks a prefix 33 str = [self stringFromXMLString:(xmlNode_->name)]; 34 } 35 } 36 37 return str; 38} 39 40- (NSString *)name { 41 42 if (cachedName_ != nil) { 43 return cachedName_; 44 } 45 46 NSString *str = [self qualifiedName]; 47 48 cachedName_ = str; 49 50 return str; 51}
回答2件
あなたの回答
tips
プレビュー