------- android培训、java培训、期待与您交流!
补充:
在car.m的实现中 访问成员变量4种方式:
_speed :直接访问成员变量
self ->_speed: 直接访问成员变量
self.speed : get方法
[self speed] :get方法
int main(){
Person *p = [[Person alloc] init];
p.age=20;
Car *c1 = [[Car alloc] init];
c1.speed = 250;
p.car = c1;
Car *c2 = [[Car alloc] init];
c2.speed = 300;
p.car = c2;
//这里如果多写了一次p.car = c2;会报错的,看下面set方法解释
[c2.release];
[c1 release];
[p release];
return 0;
}
当这个人换车的时候,需要在Person.m的set方法中把原来的车release
注意:
为了防止多写了一次p.car = c2; 因为 _car 就是c2
这里即使_car 为空:[nil release]也不为错,如果之前有car,就可以release
- (void)setCar:(Car *)car
{
if(car != _car)
{
[_car release];
_car = [car retain];
}
}
dealloc方法的代码规范
>一定要[super dealloc],而且放到最后面
>对self(当前)所拥有的其他对象做一次release
- (void)dealloc{
[_car release];
[super dealloc];
}
但注意:
Strudent *stu = [[Student alloc] init];
//这行代码有内存泄露
stu.car = [[Car alloc] init]; //Car 的计数器为2
[stu release]; //Car 的计数器为 1
//这行也有内存泄露
[[Car alloc] init].apeed = 100;
Student.h中声明:
//retain : 生成的set方法里面,release旧值,retain新值
@property (retain) Book *book;
@preperty (retain) NSString *name;
重写dealloc:
- (void)dealloc
{
[_book release];
[_name release];
[super dealloc];
}
1.内存管理相关的参数:
>retain:release旧值,retain新值(适用于OC对象类型)
>assign:默认:@property (assign) int age;(适用于非OC对象类型)
>copy:release旧值,copy新值
2.是否要生成set方法:
>@property (readonly) int height;//只会声称getter声明、实现
>@property (readwrite) int height;//默认,同时生成setter和getter的声明、实现
3.多线程管理
>nonatomic:生成setter的时候不要加索,性能高
@property (nonatomic,assign) int age;
>atomic:性能低(默认)
4.setter和getter方法的名称:一般用在布尔类型get方法
@property (getter = isRich) BOOL rich; //BOOL b = p.isRich;布尔类型 一般以is开头
@property (getter = abc, setter = setAbc:) int weight; //只影响方法名,不影响成员变量名
综合:
@property (nonatomic, assign, readwrite,setter= tizhong) int weight;
=================================微博模型设计=================================
一.设计一个微博用户类,包含以下属性:姓名 微博号码 密码 头像 性别 手机 生日
User.h:声明
#import
typedef enum{
SexMan,
SexWoman
} Sex;//性别 ,不是对象,是基本数据类型
typede struct {
int year;
int month;
int day;
} Date; //结构体表示生日,不是对象,是基本数据类型
//姓名 微博号码 密码 头像 性别 手机 生日
@interface User : NSObject
@property (nonatomic, retain) NSString *name;
@Property (nonatomic, retain) NSString *account; //账号
@Property (nonatomic, retain) NSString *password;
//图象,配图,用的都是url,还是字符串
@Property (nonatomic, retain) NSString *icon; //头像
@property (nonatomic, assign) Sex sex; //不是OC对象,用assign ,是OC对象用retain
@property (nonatomic, retain) NSString *phone;
@property (nonatomic, assign) Data birthday;
@end
User.m:实现
#import "User.h"
#implementation User
- (void)dealloc{
[_name release];
[_account release];
[_icon release];
[_password release];
[_phone release];
}
二.设计一条微博,包含以下属性:微博内容、微博配图、发送时间、微博发送人、转发的微博、被评论数、被转发数
Status.h:声明
#import
#import "User.h"
@interface Status : NSObject
@property (nonatomic, retain) NSString *test;
@property (nonatomic, retain) NSString *icon;
@property (nonatomic, assign) time_t time; //time_t 就是long,从1970-1-1 00:00:00开始,一共度过多少毫秒
@property (nonatomic, retain) User *user; //微博发送人
@property (nonatomic, retain) Status *retweetStatus; //转发的微博
@property (nonatomic, assign) int commentsCount; //被评论数
@property (nonatomic, assign) int retweetsCount; //被转发数
@end
#import "Status.h"
@implementation Status
- (void)dealloc{
[_test release];
[_icon release];
[_user release];
[_retweetStatus release];
[super release];//===============一定别忘了===============
}
@end
#import
#import "User.h"
#import "Status.h"
int main(){
User *u1 = [[User alloc] init];
u1.name = @"2B";
User *u2 = [[User alloc] init];
u2.name = @"SB";
Status *s1 = [[Status alloc] init];
s1.text = @"今天天气真好";
s1.user = u1; //2B这个用户发送了s1这条微博
Status *s2 = [[Status alloc] init];
s2.text = @"今天天气真的是很好";
s2.retweetsCount = s1;
s2.user = u2; //SB这个用户转发了2B的那条微博
[u2 release];
[u1 release];
[s2 release];
[s1 release];
return 0;
}
------- android培训、java培训、期待与您交流!