zoukankan      html  css  js  c++  java
  • iOS-关于@property和@synthesize

    最近在研究自定义控件,想找到一个比较规范的自定义控件方法,然后我又遇到了一直都迷惑,从来没搞明白的问题

    @property和@synthesize

    这是个灾难!!!我竟然用了这么久的@property还是没搞明白好想死!!!

    问题1:@property和@synthesize到底做了什么

    在之前的时候,@property是用来代替声明变量的时候的set 、get方法,而@synthesize是为了代替set、get方法的实现

    比如说,如果不用@property来声明变量的话,就要这样写

     

    而使用了@property来声明的话就简洁很多

    将的两种写法对比,可以得知,@property代替了属性声明时的set、get方法,@synthesize代替了set、get方法的实现

    当然,这是之前的oc语言写法,现在的情况是:使用@property来声明属性的时候,已经不需要来写@synthesize了,系统会自动添加这行代码

    但是

    如果你写成了@synthesize name;  那么后面你使用这个属性的时候就要写self.name 或者直接写 name ,不能在写_name.

    关于下划线有一篇博客写的很经典http://blog.csdn.net/ztp800201/article/details/9231617

    虽然现在已经告别了@synthesize,但是有时候你可能需要重写get,set的实现方法,比如说在自定义控件的时候

    下面是一个自定义控件的例子

    当在自定义的控件中添加subView的时候,使用重写get方法的方式来实例化view

    这种方法是在写自定义控件的时候在一篇博客上看到的,到底为什么这样写我也不是很清楚,貌似可以使代码更简洁?

    但是我们知道,系统自动创建的get方法中并没有自动创建实例变量,在使用NSString和数值类型的时候没有问题,但是在使用数组等对象类型的时候就会发现对象一直都是nil

    这是因为系统不会自动帮你实例化,所以你要自己手动实例化,在viewdidload中实例化或者在重写get方法中实例化都可以

  • 相关阅读:
    saltstack笔记
    saltstack学习篇
    tomcat学习篇
    memcache笔记
    sed、awk学习篇
    javascript function call
    jvm性能调优工具
    spring boot 单元测试
    activemq 分布式事务
    sringboot 集成dobbo2.5.3
  • 原文地址:https://www.cnblogs.com/chebaodaren/p/5261223.html
Copyright © 2011-2022 走看看