error: property's synthesized getter follows Cocoa naming convention for returning 'owned' objects

时间:2021-04-01 15:13:08

error: property's synthesized getter follows Cocoa naming convention for returning 'owned' objects

出现这样的情况,主要是属性名中包括  keyword.

You can solve this by:

  1. Renaming that property:

    @property (strong, nonatomic) NSString *theNewTitle;
  2. 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;
  3. 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 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;
    @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.