发表于: 2016-12-20 19:39:26

2 739


今天完成的事情:复习对象初始化,属性。
明天计划的事情:继续挖掘OC
遇到的问题:init方法会返回不同对象,init方法可以接受参数,并且能检查其接收的参数,并返回一个更合适的另一个类的对象。如果是一个字符串里面全是数字,是不是会返回一个NSArray。self = [super init]解决。

init方法第一种 Abc *abc = [[Abc alloc] init];出产即用。

             第二种 Abc *abc = [Abc alloc];节约性能,灵活。但是在创建另外对象的方法时必须在创建Abc对象,然后访问方法赋值。惰性求值,等到调用者需要时在创建对象提高性能。不知道我这样的理解对不对?
收获:

对象初始化:

1.Abc *abc = [[Abc alloc] init]; alloc为类分配一块足够大的内存,存放类的全部实例变量,还会将这块内存区域全部初始化为0。init方法,会返回正在初始化的对象。

2.init方法可能返回完全不同的对象。self = [super init];self参数通过固定的距离寻找实例变量的内存位置。

if (self = [super init])//会先执行[super init] 对超类进行全新初始化,初始化时出现问题,init方法会返回nil。比如init方法初始化的对象不存在了或者改变了,//就会返回nil,if主体将不能执行

{

方法内的实例变量的引用可以被映射到正确的内存位置。

};//只影响该init方法中的self值,(局部)

3.- (id) initWithContentsOfFile: (NSString *)path enCoding: (NSStringEncoding)enc error: (NSError **)error;

该方法用来打开指定路径上的文本文件,读取文件内容,并使文件内容初始化一个字符串。

便利初始化函数都用于不可变对象。

NSMutableArray数组 replaceObjectAtIndex: withObject:从数组集合中删除现有对象并用新对象替换。

指定索引出必须存在一个能够被替换的对象。(NSNull类对象);

NSArray objectAtIndex: 从数组获取对象。

4.指定初始化函数

如果初始化方法过多。某个初始化方法被指派为指定初始化函数,该类的所有初始化方法都是用指定初始化函数执行初始化操作,子类使用其超类的指定初始化函数进行超类的初始化。接受参数最多的初始化方法是最重的指定初始化函数。  如果创建了一个指定初始化函数,一定要在自己指定的初始化函数中调用超类的指定初始化函数。


属性:

1.@property预编译指令自动声明setter getter方法。属性名称大多数情况都是和实例变量相同,也可以做到不相同。

2.@synthesize 编译器将添加setter  getter方法实现代码。

3.  .h中声明的实例变量,可以在当前类之外属性访问。.m文件中的只能在当前类。

4. 属性基于变量。在用@synthesize合成setter  getter方法时,编译器会自动创建于属性名称一样的实例变量。

5. 点语法可以更容易的访问属性。 如果点表达式出现在等号左边,该变量名称的setter方法被调用。反之调getter方法。

6.为避免死循环,超类保留子类,子类不能保留超类。(assign足以解决 , assign特性不保留某个变量对象)

7.@property()中不写特性默认是assign 和nonatomic.声明nonatomic,如果不在多线程中使用,可以提高访问方法的调用速度(IOS)。readwrite可读可修改,默认属性。readonly只读,不生成setter方法,只有getter方法。

8.关键字@dynamic可以告诉编译器不生成任何代码和相应的实例变量。

9.属性只支持替代一个参数的setter getter方法。



返回列表 返回列表
评论

    分享到