解决方案 »

  1.   

    结构体的字段最好都是基本类型的字段,比如int,float,结构体里面要存放对象也是可以的,不过非常不安全,我之前试着用过,经常或出现莫名其妙的错误,如果你要存储对象类型的变量最好还是直接创建一个类来存储
      

  2.   

    如果你非要用结构体存放对象也可以,前面标识一下就行了,像这样
    __unsafe_unretained UIImage *componentImg;
    就能用了,在这里还是友情劝阻一下,不知道是不是我不会用,反正我这么用了一次出现一些很奇怪的问题,之后我就再也不这样用了,很多人都不推荐
      

  3.   

    结构体得使用基本数据类型,不要使用object-c引入的数据类型。
      

  4.   


    ARC项目不直接支持,非ARC项目可用。
    ARC项目中试用这样结构的文件,编译选项加上:
    -fno-objc-arc
    即可。结构与类其实意义差不多,建议直接使用类。
      

  5.   

    ARC需要在一个合适的位置插入成员的释放行为,在Objective-C中,编译器会把实例成员的release放在该类型的实例方法dealloc中。而由于标准的C结构体,即struct,是没有析构函数的,所以编译器无法在合适的位置插入成员的release操作。从而导致内存泄漏。所以,在ARC项目中,不做特殊处理是无法在struct中声明Objective-C对象的,除非明确指定放弃对所声明对象的内存管理责任,即楼上提到的,将对象定义为__unsafe_unretain,这样ARC就不会想办法插入release操作了
      

  6.   

    使用 ARC 之后,C Struct 中不能使用 Objective-C 对象,下面代码就是非法的:
    typedef struct
    {
    UIImage *selectedImage;
    UIImage *disabledImage;
    } ButtonImages;

    解决办法是定义一个 Objective-C 类,不使用 C Struct