您的位置:首页 > 产品设计 > UI/UE

Semantic Issue: Property's synthesized getter follows Cocoa naming convention for returning 'owned'

2012-12-05 07:26 447 查看
@interface ViewController : UIViewController {
NSString *newTitle;
}
@property (strong, nonatomic) NSString *newTitle;
@synthesize newTitle;
I'm currently using the iOS 5 SDK trying to develop my app. I'm trying to make an NSString a property, and then to synthesize it in the .m file (I have done this before with no issues). Now, I came across this: "Semantic Issue: Property's synthesized getter follows Cocoa naming convention for returning 'owned' objects."
answer:
You take ownership of an object if you create it using a method whose name begins with “alloc”, “new”, “copy”, or “mutableCopy”.
A property named 
newTitle
, when synthesised, yields a method called 
-newTitle
, hence the warning/error. 
-newTitle
 is supposed to be a getter method for the 
newTitle
 property, however naming conventions state that a method whose name begins with 
new
 returns an object that’s owned by the caller, which is not the case of getter methods.You can solve this by:Renaming that property:
@property (strong, nonatomic) NSString *theNewTitle;
Keeping the property name and specifying a getter name that doesn’t begin with one of the special method name prefixes:
@property (strong, nonatomic, getter=theNewTitle) NSString *newTitle;
Keeping both the property name and the getter name, and telling the compiler that, even though the getter name starts with 
new
, it belongs to the 
none
 method family as opposed to the 
new
method family:
#ifndef __has_attribute#define __has_attribute(x) 0  // Compatibility with non-clang compilers#endif#if __has_attribute(objc_method_family)#define BV_OBJC_METHOD_FAMILY_NONE __attribute__((objc_method_family(none)))#else#define BV_OBJC_METHOD_FAMILY_NONE#endif@interface ViewController : UIViewController@property (strong, nonatomic) NSString *newTitle;- (NSString *)newTitle BV_OBJC_METHOD_FAMILY_NONE;@end
Note that even though this solution allows you to keep 
newTitle
 as both the property name and the getter name, having a method called 
-newTitle
 that doesn’t return an object owned by the caller can be confusing for other people reading your code.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐