美文网首页
@property 和 @synthesize 属性和实例变量

@property 和 @synthesize 属性和实例变量

作者: 半江瑟瑟 | 来源:发表于2016-09-06 16:08 被阅读19次

    .h
    @property (nonatomic,strong) WKWebView *myWebView;//属性

    .m
    {
    WKWebView *myWebView;//实例变量
    }
    报一个警告 告诉你我要自动的生成一个_myWebView的实例变量,而不会使用_myWebView变量 因为@property.


    Paste_Image.png

    .h不变
    .m 加上了
    @synthesize myWebView;

    Paste_Image.png

    现在只能用myWebView了,因为@synthesize myWebView;就是生成myWebView实例变量来对应@property,当然了如果有了myWebView的实例变量就不用再生成了,直接用就好了.

    不自己生成myWebView实例变量,就会自动生成


    Paste_Image.png

    如果@synthesize myWebView = xxx,那么就用xxx对应@property


    Paste_Image.png

    现在的版本中 只用@property就可以了,自动生成set和get方法,检查有没有_xxx的实例变量,没有就自己生成,有就直接用,@synthesize 就不会自动生成_xx了 要根据@synthesize 后面的代码怎么写
    参考文章:http://www.cnblogs.com/crazypebble/p/3439261.html
    http://blog.csdn.net/jabony/article/details/19021539
    http://cuichang.iteye.com/blog/1073201
    http://my.oschina.net/iamzkt/blog/126503
    http://www.jianshu.com/p/d9759dd1fb2e

    类别中的属性property
      类与类别中添加的属性要区分开来,因为类别中只能添加方法,不能添加实例变量。经常会在ios的代码中看到在类别中添加属性,这种情况下,是不会自动生成实例变量的。比如在:UINavigationController.h文件中会对UIViewController类进行扩展
    @interface UIViewController (UINavigationControllerItem)

    @property(nonatomic,readonly,retain) UINavigationItem *navigationItem;

    @property(nonatomic) BOOL hidesBottomBarWhenPushed;

    @property(nonatomic,readonly,retain) UINavigationController
    *navigationController;
    @end

    这里添加的属性,不会自动生成实例变量,这里添加的属性其实是添加的getter与setter方法。
      注意一点,匿名类别(匿名扩展)是可以添加实例变量的,非匿名类别是不能添加实例变量的,只能添加方法,或者属性(其实也是方法)。

    相关文章

      网友评论

          本文标题:@property 和 @synthesize 属性和实例变量

          本文链接:https://www.haomeiwen.com/subject/ozvdettx.html