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!";

时间: 2024-08-05 07:09:31

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

c语言中用户标识符的作用域和存储类(2)

2 局部变量及其作用域和生存期 2.1 auto变量 当在函数内部或复合语句内定义变量时,如果没有指定存储类,或使用auto说明符,系统默认所定义的变量为自动类别.因此: float a; 等价于 auto float a; auto变量的存储单元被分配在内存的动态存储区.当进入函数体时,系统自动为auto变量分配存储单元:退出时自动释放这些存储单元.这类局部变量的作用域是从定义的位置起,到函数体结束为止.由于函数的频繁调用,动态存储区内为某个变量分配的存储单元位置随程序的运行而改变,变量的初值

Linux中的两个经典宏定义:获取结构体成员地址,根据成员地址获得结构体地址;Linux中双向链表的经典实现。

倘若你查看过Linux Kernel的源码,那么你对 offsetof 和 container_of 这两个宏应该不陌生.这两个宏最初是极客写出的,后来在Linux内核中被推广使用. 1. offsetof 1.1 offsetof介绍 定义:offsetof在linux内核的include/linux/stddef.h中定义.#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) 说明:获得结构体(TYPE)的变量成员(

c语言中用户标识符的作用域和存储类(1)

在c语言中,标识符必须先定义后使用.但定义语句应该放在什么位置?在程序中,一个定义了的标识符是否随处可用?这些问题牵涉到标识符的作用域.经过赋值的变量是否在程序运行期间总能保存其值?这又牵涉到变量的生存期.当一个程序的若干函数分别存放于不同的文件中时又有何限制?对于上述问题,c语言中有具体的规定. 读者应该特别注意 “定义” 和 “说明” 这两个词.“定义”(definition)是指给变量分配确定的存储单元,“说明”(declaration)只是说明变量的性质,而并不分配存储空间. 1 局部变

android 在子线程中如何把自定义对象传到handler中处理

一般来说,Thread中要把数据传出去就用message. bundle.handler来配合使用,代码如下 Message msg=new Message(); Bundle b=new Bundle(); b.putString("context", object.toString()); msg.setData(b); Log.e("OUT", object.toString()); handler.sendMessage(msg); 但是,bundle能存的

JS中彻底删除json对象组成的数组中的元素

只是分享一个小知识~ 在JS中,对于某个由json对象组成的数组,例如: var test = [{ "a": "1", "b": "2" }, { "a": "3", "b": "4" }, { "a": "5", "b": "6" }]; 如果我们想要删除其中的第二

java 对象锁和类锁的区别(转)

java 对象锁和类锁的区别   转自 <http://zhh9106.iteye.com/blog/2151791> 在java编程中,经常需要用到同步,而用得最多的也许是synchronized关键字了,下面看看这个关键字的用法. 因为synchronized关键字涉及到锁的概念,所以先来了解一些相关的锁知识. java的内置锁:每个java对象都可以用做一个实现同步的锁,这些锁成为内置锁.线程进入同步代码块或方法的时候会自动获得该锁,在退出同步代码块或方法时会释放该锁.获得内置锁的唯一途

synchronize——对象锁和类锁

最近在研究Java 多线程的只是,经常能看到synchronize关键字,以前只是一眼带过,没有细究,今天趁这个机会,整理下 synchronize作为多线程关键字,是一种同步锁,它可以修饰以下几种对象: 代码块:被修饰的代码块称为同步语句块,其作用的范围是大括号{ }里的代码,作用的对象是调用这个代码块的对象: 方法:被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象 静态方法:作用的范围是整个静态方法,作用的对象是这个类的所有对象 类:作用的范围是synchro

python0.16------构造函数/析构函数/self详解/重写/访问限制/对象属性和类属性/@property/运算符重载

构造函数:__init__()引子:因为每个人一出生都是不一样的.因此,如果在Person类中直接给类元素赋值有问题,它会导致每个人的初始状态相同,这不符合大自然的逻辑.应该根据每个人的特点,给每个出生的人不一样的特性.可以通过构造函数实现这个想法.__init__()函数在使用类创建对象自动调用.注意:如果不显式写出构造函数,默认会添加一个空的构造函数. 使用构造函数:def __init__(self,name,age,height,weight):#一般定义属性在构造函数里面定义. sel

Runtime的初步认识——结构体与类

Runtime的初步认识 Runtime的初步认识 Runtime介绍 类与结构体的关系 结构体解析 结构体的作用 Runtime介绍 学习一个东西至少要先知道它是个啥,你一定听说过"运行时是 Objective-C 的一个特色",这里的"运行时"就是指 runtime 了. runtime是在自 iOS 平台开放并基于 Objective-C 语言开发后的一个编程语言上的高级技术. 学习runtime的目的并不是为了开发,而是让你更好的理解 Objective-C