黑马入门教程笔记02-OC

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">一、用结构体做为类的变量</span>

#import <Foundation/Foundation.h>


//生日的结构体
typedef struct
{
    //年月日
    int _year;
    int _month;
    int _day;
}MyDate;

@interface Student:NSObject
{
@public;
    NSString *_name;
    MyDate _birthday;//结构体变量,int每一个4个字节,共12个字节
//    MyDate *_bp;<span style="background-color: rgb(255, 255, 0);">//不用结构体指针变量,会多开销不少堆区空间,如系统会自动添加上*isa指针等浪费空间,一个指针占用8个字节</span>
    
}
@end

@implementation Student

@end

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Student *stu = [Student new];
        //内存代码区,保存类属性和方法
        //内存堆区,_name = null, _birthday结构体,每一个成员初始化为0
        stu->_name = @"张三";
//        stu->_birthday = {1990,9,12};<span style="background-color: rgb(255, 255, 0);">//错误,不能识别{...}为结构体,因此要在前面增强制转换</span>
        //第一种方法
        stu->_birthday = (MyDate){1990,9,12};
        //第二种方法,定义一个结构体变量
        MyDate d1 = {1989,1,11};
        stu->_birthday = d1;
        //第三种方法,逐个赋值
        stu->_birthday._year = 1988;
        stu->_birthday._month = 9;
        stu->_birthday._day = 12;
        NSLog(@"%d",stu->_birthday._year);

        
    }
    return 0;
}


二、字符串长度安全

在OC字符串中认为中英文都是一个字符,都是占用一个字节;工具

在C语言一个汉字占用3个字节(UTF-8编码)。学习

NSString *str = [NSString new];
str = @"班长的节操";
NSLog(@"%ld",[str length]);//5个
char *str2 = "班长的节操";
printf("%ld",strlen(str2));//15个

三、+类方法的好处编码

//第一种方法,须要在堆区分配三个变量_num1,_num2,_result
        Caculator *cal = [Caculator new];
        cal->_num1 = 10;//在堆区分配三个变量_num1,_num2,_result
        cal->_num2 = 3;
        [cal add];
        NSLog(@"%.2f",cal->_result);
        
        //第二种方法,不须要在堆区分配空间三个变量_num1,_num2,_result
        Caculator2 *cal2 = [Caculator2 new];
        int result2 = [cal2 add:12 andNum2:34];
        NSLog(@"%d",result2);
        
        //第三种方法,类方法,不须要建立一个实例,节省内存空间
        int result3 = [Caculator3 add:20 andNum2:40];
        NSLog(@"%d",result3);
1)节省内存空间;2)提升了效率;3)做为工具方法


四、+类方法的易犯错误spa

在类方法中不能使用类的成员变量,在实例方法中可使用类的成员变量!3d


五、在+类方法中能够调用其余相似方法指针

1)能够直接使用本类类名(或者其余类名)调用类方法;code

2)可使用self。对象


六、对象方法中能够调用其余对象的方法blog

1)当前对象中建立对象(能够是当前类实例对象,也能够是其余类的实例对象),使用新建立的对象调用对象方法

2)可使用self

3)对象做为方法的参数传递过来,可使用传递过来的对象调用方法。


七、C语言里导入头文件的<>和“”有什么区别

""首先在当前目录下寻找,若是找不到,再到系统目录中寻找
<>直接去系统目录中找


八、 匿名类的使用

 //[Car new];//实质上对象的存储空间
//匿名类(匿名对象)
//匿名类的第一种使用方法:
//一、使用匿名类访问实例变量(能,只能访问一次)
[Car new]->_speed = 300;
NSLog(@"_speed = %d",[Car new]->_speed);//输出为0,不是250

//二、使用匿名的类,能够调用方法
[[Car new] stop];


九、封装的步骤

定义设置实例变量setter方法和访问实例变量的getter的方法

setter方法(设置器):在开发过程当中,考虑到安全性要求,通常不在成员变量名前面使用@public、@protected等关键字修饰,而是使用set方法来对象提供成员变量的值。在Set方法的内部能够看堆一些不合理的赋值进行筛选过滤。Set方法的做用:为外界提供一个设置成员变量值的方法。


十、对象之间的关系

组合关系、依赖关系、关联关系(一夫一妻,一个班级能够有不少个学生,一个学生能够学习多门课程,一个课程能够有多个学生)


十一、Static关键字使用

在OC语言中,在变量声明前使用static,可使局部变量保留屡次调用一个方法所得的值,变量为静态变量,位于程序的全局数据区,若做全局变量,可将声明放在实现文件的开始部分。

不容许在实例变量前使用static,即实例变量不能声明为静态。


也不能修饰方法


4