ios小知识
本质上还是一个对象.叫类对象.这个对象的类型:Class
类对象是在程序启动的时候加载的,与对象创建无关.
加载的标志:是load方法.
对象是在它被创建的时候加载的.且必须在类对象加载完成后才会加载.
对象加载会执行initialize方法. 只会在对象第一次创建的时候执行.
init :构造方法
构造方法是在对象被创建的时候执行的.对象每次创建都会执行.
注意:
1.一个类的实例对象被创建,则其父类的对象也会被创建.(直接或间接父类都会被创建)
2.分类的load方法不会覆盖主类的.主类与分类的load方法在程序启动的时候都会执行.
*/
类对象只有一个
Class c=[am class];
// Class c2=[am2 class];
// Class c3=[Animal class];
1,类是什么
类的本质其实也是一个对象(类对象);
类对象
1,类对象在程序运行时一直存在。
2,类对象是一种数据结构,存储类的基本信息:类大小,类名称,类的版本以及消息与函数的映射表等
3,每一个对象都包含一个指向其类对象的isa指针。
2、类对象如何获取
通过实例对象获取
Dog *d1 = [Dog new];
Dog *d2 = [Dog new];
Class c = [d1 class];
Class c2 = [d2 class];
通过类名获取(类名其实就是类对象)
Class c3 = [ Dog class ];
因为类对象在整个程序中只存在一份,
所以 c = c2 = c3
3.类对象的使用,如何使用
1)可以用来调用类方法 :
//获取类对象
Class c1 = [Person class];
//使用类对象调用类方法
[c1 test]; // test是一个+号方法
2)可以用来实例化实例对象, 并且调用对象方法
//获取类对象
Class c1 = [Person class];
//使用类对象创建实例对象
Person *p = [c1 new];
[p test]; // -test 调用对象方法
4. 类对象存储细节
通过打印地址分析测试:类对象存在数据段;
SEL类型
SEL是一种新的数据类型。和id、class一样。
Person *p = [Person new];
SEL s1 = @selector(test);
[p performSelector:s1];
注意:
以下所学的字符串常用函数都在头文件<string.h>中,所以用这些函数之前要导入这个头文件
1.strcmp:
用法:int strcmp(字符串1,字符串2);
两个参数,一个int的返回值:
作用:
判断两个字符串是否相同,如果返回0代表两个字符串相同 (实际开发中的用法)
是比较两个字符串大小的!
问字符串1比字符串2大吗?大则返回正数,相等则返回0,小于则返回负
判断用户输入的账号是否等于某个账号
做登录!!
如果用户输入的是admin密码是88888,那么就提示登录成功,否则提示登录失败
2.strcat:
用法:strcat(字符数组1,字符串2);
作用:把字符串2加入到字符数组1的实际字符串后面
比如说前面一个字符数组保存的abc
字符串2传的是qwe
那么调用完后,字符数组最终保存的是abcqwe
注意:字符数组1必须保证长度足够长
3.strcpy:
用法:strcpy(字符数组1,字符串2);
作用:把字符串2复制到字符数组1,会覆盖掉字符数组1原来的内容
比如说前面一个字符数组保存的是abc
字符串2是qwe
那么调用完后字符数组1最终保存的是qwe
注意:字符数组1的长度必须保证足够长
应用场景在:给字符数组重新赋值的时候
4.strlen:
用法:unsigned long strlen(字符串);
作用:计算这个字符串的实际长度,不包括\0
注意:如果遇到中文或者中文符号,那么中文的实际位数要*3
strlen的原理是:一直遍历你这个字符串,统计次数,直到遇到\0就结束
*/
#include <stdio.h>
#include <string.h>//要导入
int main(int argc, const char * argv[]) {
//strcmp
/*
char str1[10] = "azc";
char str2[] = "zbc";
//数组名就是地址,所以这里比较的是地址是否相同
if(str1 == str2){
printf("相同\n");
}else{
printf("不相同\n");
}
int res = strcmp(str1, str2);
printf("%d\n",res);//-25
*/
//strcat
/*
// char str[4] = "abc";
//
// strcat(str, "qwe");//越界错误
//
// puts(str);//abcqwe
char str[] = "abc";//长度为4
strcat(str, "qwe");//
puts(str);//abcqwe
*/
//strcpy
/*
// char str[10] = "abc";
//
// strcpy(str, "qwe");
//
// puts(str);//qwe
// char *str = "abc";
//
// strcpy(str, "qwe");//这是错误的
//
// puts(str);//qwe
// char str[] = "abc";//4个长度
// strcpy(str, "qwerty");//运行报错,因为越界
// char str[5];
//
// strcpy(str,"abc"); //相当于给str赋值
//
// puts(str);
// char str[5];
//
// str = "abc";//不可以,因为数组名是一个地址常量
char str[5] = "abc";
//此时我想让str里面存的是zxv
// str[0] = 'z';
// str[1] = 'x';
// str[2] = 'v';
strcpy(str, "zxv");
puts(str);
*/
//strlen
/*
// char str1[4] = "abc";
// long len = strlen(str1);
//
// printf("len=%ld\n",len);//3
//
// char *str = "abc";
// long len = strlen(str);
//
// printf("len=%ld\n",len);//3
// long len = strlen("abc");
//
// printf("len=%ld\n",len);//3
// char str[10] = "abc\0zxc";
//
// long len = strlen(str);
//
// printf("len=%ld\n",len);//3
// char str[] = "帅哥";//长度为7
//
// long len = strlen(str);
//
// //中文在MAC里面占用3个字节
// //因为一个char类型只有1个字节,保存不了3个字节的汉字
// //char c = '哈'; //这个会报错
//
// printf("len=%ld\n",len);//6 在mac下面一个中文字占用3个字节
// char str[] = ",";
//
// printf("%lu\n",strlen(str));
// char str[] = "abc哈哈哈"; //数组长度那才是13个
//
// printf("%lu\n",strlen(str));//12
// char str[] = "班长不要爱我,haha"; //数组长度26
//
// printf("%lu\n",strlen(str));//25
*/
return 0;
}
|