/*
属性的作用域:
属性的作用域由权限修饰符控制,不同的权限修饰符作用域不同
主要有四大类:
@private:
只能在当前类的对象方法中直接访问
@protected
可以在当前类以及子类的对象方法中直接访问
@public
任何地方都可以直接访问
@package
同一个体系内可以直接访问 介于@private和@public 之间
不写修饰符:
1.如果上面有定义别的属性,则跟随上一个属性的权限
2.如果上面没有别的属性默认是@protected
*/
1.属性用什么来控住作用域?
权限修饰符
2.属性有哪几种权限?主要是哪三种?
public
protected
private
package
主要的是上面的三种 ..............package不常用
3.不定属性权限时默认的是什么?
分两种情况
1.如果上面有定义别的属性 则跟随上一个属性的权限
2.如果上面没有别的属性 则默认是protected
4.一个类只有实现没有声明可不可以使用 若使用则默认权限是什么?
没有声明只有实现可以 不使用,编译不会报错
默认权限是 private
5.只有类的声明能创建对象吗?只有实现呢?
只有类的声明 不能创建对象
只有类的实现 可以创建对象
/*
#import <Foundation/Foundation.h>
//@interface Person:NSObject
//-(void)run;
//@end
@implementation Person:NSObject
-(void)run{
NSLog(@"不明白!");
}
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person* per =[Person new];
[per run];
}
return 0;
}
*/
7.类的实现中定义属性默认是什么权限?
private 私有属性 只有在本类中可以直接使用 其他地方只能使用 set get 方法时可以使用
8.@property能做哪三件事?用了@property还能自己定义set 与 get 方法吗?
第一步:查看是否创建了_属性名 如果没有则自动生成标准格式的属性声明 有则不创建
第二步:检查是否有标准格式的set 与 get 的声明 如果有则不创建 没有则自动生成标准格式的声明
第三步:检查是否有标准格式的set 与 get方法的实现 如果没有则自动生成标准格式的实现 有则不创建
/*
注意:
@property 自动生成的 属性是 private 的权限
如果检查有手动编写的标准 set 与 get 方法的声明与实现 则不会在自动实现对属性定义的创建
*/
9.@property什么时候不起作用?
分两种情况
1.如果手动编写了 标准格式的 属性的声明与 set 与 get 方法的声明与实现 则不起作用
2.如果手动编写了标准格式的 set 与 get 方法的声明与实现 而没有属性的定义 则也会不起作用
10.@synthesize是在xcode哪个版本之前使用的
xcode 4.4 之前 用来与@property 对应做属性的实现
11.NSObject * 和 id 的区别
1.id指针调用对象独有的方法 不需要强制转换 而NSObject * 需要强制转换
2.id指针使用点语法 必须强转换成真实类型
12.id指针的作用是什么?
可以表示任意的oc 对象 等效于 NSObject *
13.id 指针调用对象独有的方法要强转吗?
不需要
14.id指针能直接使用点语法吗?
不能 需要强转换成真实类型
/*
id 和 instancetype 的区别
相同点:
都可以做方法的返回值 代表对象
不同点:
id 可以作为参数 而 instancetype不可以
id 是万能指针 可以指向任意对象 instancetupe 不可以它只指向当前类型的对象
*/
15.什么叫构造方法?
是一个对象在初始化时候执行的方法
init就是构造方法
16.构造方法的作用是什么?
初始化对象的值
17.一个对象可以不调用构造方法吗?
不可以
18.new方法做了什么事情?
new方法调用了两个方法:
1.调用+alloc:去给对象分配一块内存空间
2.调用-init:初始化这个对象
19.为什么要有构造方法?能给我们带来什么好处?
构造方法可以让我们得到自己想要的初始化对像值
20.重写构造方法里必须有一步的操作是什么?
[self =[super init ];
21.重写构造方法有什么不足?
封装的不好 重写后 属性值都变成固定值 每初始化一个属性都要重写一个构造方法
22.为什么要自定义构造方法?能给我们带来什么好处?
自定义构造方法可以一次性初始化很多属性 并得到自己想要的初始化对象值 不是固定值
23.自定义构造方法必须做什么事情?
self= [super init属性名:(类型)变量名]
24.子类定义构造时为什么要用父类的构造?有什么好处?
可以省略重复的属性初始化 减少代码量
25.子类用父类的构造时,调用了NSObject 中的 init吗?
调用了
|
|