#import "Human.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// 属性自动生成setter、getter方法
Human *human = [[Human alloc]init];
human.name = @"nishabi";
human.age = 28;//存
// NSInteger newAge = human.age; //取
NSLog(@"age= %ld",human.age);
NSLog(@"%@",human);
/*copy 只遵守了<NSCopying>的类才可以使用copy */
// 地址相同
NSString *str = @"hello";
id object = [str copy];
NSLog(@"copy= %@",object);
NSLog(@"str = %p object= %p",str,object);//打印地址 拷贝的是地址
// copy浅赋值:指针赋值
// 地址不同
NSMutableString *string = [[NSMutableString alloc]initWithFormat:@"world"];
id object1 = [string copy];
NSLog(@"string = %p object1= %p",string,object1);//打印内容,拷贝的是内容
// copy深赋值:内容赋值,复制后产生新的对象
// copy后返回的对象都是不可变的对象
/*mutableCopy*/
NSString *string1 = [[NSString alloc]initWithFormat:@"hello"];
id object2 = [string1 mutableCopy];
NSLog(@"object2= %@",object2);
NSLog(@"object2= %p string1= %p",object2,string1);
NSMutableString *mutableString = [[NSMutableString alloc]initWithFormat:@"word"];
id object3 = [mutableString mutableCopy];
[object3 insertString:@"u" atIndex:2];
NSLog(@"object3= %@",object3);
NSLog(@"object3= %p mutableString= %p",object3,mutableString);
// mutableCopy对于可变对象或者不可变对象都是深复制, 返回类型是可变的
}
return 0;
}
创建 Cocoa Touch Class文件 类名Human
.h
#import <Foundation/Foundation.h>
@interface Human : NSObject
@property(nonatomic,readwrite)NSString *name;
@property(nonatomic,assign)NSInteger age;
@end
/*
第一类:线程有关
nonatomic:非原子性,与线程无关,速度较快,通常用于单线程
atomic(系统默认):原子性,与线程有关,通常用于多线程
第二类:内存管理有关
strong:强引用 =retain
weak:弱引用 =assign
retain:修饰的对象类型 需要内存管理
assign:基本数据类型 无需内存管理
copy:修饰对象类型 ,推荐NSString 类型使用copy修饰
第三类:setter getter
readonly:只读,只能调用我的getter方法取值
readwrite(默认):setter、getter方法都能使用
getter= :给getter方法重写命名,一般使用在bool类型
第四类:可空类型
nonnull:属性值不能为nil
nullable(默认):属性值可以为空
*/
/*
ios5之前
1、声明下划线成员变量
2、声明属性
3、属性名和成员变量名关联(@synthesize)
ios5之后
1、自动生成下划线成员变量
2、自动生成setter getter的方法声明和实现
3、无需使用将属性(@synthesize)和成员变量名进行关联
如果手动实习了setter getter方法中的某一个,系统会自动将另外一个方法配齐
如果手动实习了setter getter,需添加@synthesize name = _name
*/
.m
#import "Human.h"
@implementation Human
//无需声明和手动调用
- (NSString *)description
{
return [NSString stringWithFormat:@"name= %@ age= %ld", _name,_age];
}
@end