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.
-newTitleis supposed to be a getter method for the
newTitleproperty, however naming conventions state that a method whose name begins with
newreturns 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
nonemethod family as opposed to the
newmethod 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;@endNote that even though this solution allows you to keep
newTitleas both the property name and the getter name, having a method called
-newTitlethat doesn’t return an object owned by the caller can be confusing for other people reading your code.
相关文章推荐
- Property's synthesized getter follows Cocoa naming convention for returning 'owned' objects
- 错误: Property's synthesized getter follows Cocoa naming convention for returning 'owned'
- property's synthesized getter follows Cocoa naming convention for returning 'owned' objects
- Property's synthesized getter follows Cocoa naming convention for returning 'owned' objects(2012-01-
- error: property's synthesized getter follows Cocoa naming convention for returning 'owned' objects
- Error解决:Property's synthesized getter follows Cocoa naming convention for returning 'owned'
- Semantic Issue: Property's synthesized getter follows Cocoa naming convention for returning 'owned'
- Error解决:Property's synthesized getter follows Cocoa naming convention for returning 'owned'
- iOS编译问题:Property's synthesized getter follows Cocoa naming convention for returning 'owned'
- iOS开发 error: property's synthesized getter follows Cocoa naming convention for returning 'owned' obj
- Property's synthesized getter follows Cocoa naming convention for returning
- Property's synthesized getter follows Cocoa naming convention for returning
- Property's synthesized getter follows Cocoa naming convention for returning.
- Propert's synthesized getter follows Cocoa naming convention for returning 'owned' objects
- Property's synthesized getter follows Cocoa naming convention for returning.
- 随笔-property follows cocoa naming convention for returning 'owned' objects
- Property's synthesized getter follows Cocoa naming convention for returning
- property follows cocoa naming convention for returning 'owned' objects⚠️
- Property follows Cocoa naming convention for returning 'owned' objects 错误解决办法
- Property follows Cocoa naming convention for returning 'owned' objects