首页 > 代码库 > OC类中一些细节问题(对象类存储、类中结构体的用法)

OC类中一些细节问题(对象类存储、类中结构体的用法)

一:OC中得方法名

注意:方法名冒号和后面的and方法名冒号  都是方法名
 

一:对象的存储细节

    类加载到代码区(包括类中得属性和方法)、对象动态加载到堆内存中、指向对象的指针存放在栈区。

三:定义类常见的错误

定义类的时候,常见的错误

 1)类的定义不能嵌套

 2)不要漏写 @end

 3) 不要忘记写实现类(如果忘记写了,编译不会报错,运行时候才报错)

 4)定义成员变量的大括号经常漏写

 5) 如果不写@interface 只有 @implementation 这可以,但是会报警告,建议不要这么写

 

 6)把方法的声明写到了声明成员变量的括号中了

四:类中结构体的问题:

#import <Foundation/Foundation.h>

typedef struct {

    int year;

    int month;

    int day;

}MyDate;

//类的声明

@interface Student : NSObject

{

    @public

    NSString *_name;

    MyDate _birthday;  //MyDate是一个结构体

}

@end

//类的实现

@implementation Student

@end

int main(int argc, const char * argv[])

{        

        //实例化对象 stu

        Student *stu = [Student new];

        //赋值

        stu->_name = @"雷阵子";

//        stu->_birthday = {1999,11,11}  这种写法不行,_birthday在对象创建的时候,已经被初始化为0,不能在整体初始化了

//        stu->_birthday.year = 1999;

//        stu->_birthday.month = 11;

//        stu->_birthday.day = 11;        

        //d1是一个结构体变量

        MyDate d1={1988,11,11};

        //把d1的值拷贝一份给_birthday

        stu->_birthday = d1; // 值传递

比如:/*

MyDate date = {1990,3,9};

        date = {1999,9,9};  // 会报错,就是结构体初始化后不能在定义

*/

五:NSString

 NSString 的用法

     NSString 是OC的一个字符串类

 1)NSString 存放OC的字符串

    NSString *str = @"l love china!";

 2)既然是类,我们就可以实例化一个对象

    NSString *s = [NSString new];

                  1)分配空间  2)初始化   3)返回地址

    s = @"I love itcast";

 3)格式化字符串   

    NSLog(@"%d,%f",a,b);

 

    NSString *s2=[NSString stringWithFormat:@"xxxxx_%02d.jpg",i];

 

        str = @"你好中国china!";

        //计算字符串的长度的一个方法

        //OC的字符串长度计算方法

        //1、[str length],没有包含\0 ,就是实际的字符的个数

        //2、把中文的一个汉字和普通的字母都当做1个字符

        NSLog(@"str len = %lu",[str length]);        

        //c语言中的字符长度

        //1、普通字符占1个字节

        char *sss="China!";

        //2、一个汉字占3个字节(UTF-8编码),一个字符还是占用1个

        sss = "中国china!";

 

OC类中一些细节问题(对象类存储、类中结构体的用法)