18319


# 質問

現在「Objective-Cのプログラミング概要」というAppleが作ってるドキュメントを読んでいます。  
その中で、サブクラス作成方法において複合オブジェクトを用いたサブクラス作成例(P17〜)のinitメソッドに出てくる「zone」がどこから出てきたのか理解できずに困っています。  
「zone」はどこから出てきたのでしょか？

# 不明点のサンプルコード抜粋

[code]

    - init {
      self = [super init];
      if (self) {
          embeddedArray = [[NSMutableArray allocWithZone:[self zone]] init];
      }
      return self;}
    
[/code]

# サンプルコード抜粋元資料

<https://developer.apple.com/jp/documentation/CocoaEncyclopedia.pdf>

* * *

# 推測

わからないなりに推測してみました。  
NSMutableArrayはNSArrayを継承したサブクラス、更にNSArrayはNSObjectを継承したサブクラスであるため、`[self
zone]`でNSObjectの`zone`メソッドにメッセージを送れる。  
また、`allocWithZone`メソッドもNSObjectを継承しているため、メッセージをおくれる。  
なお、資料が古いため過去requiredだった`zone`がそのまま使われており、現在は使えない状態である。

## 推測の根拠

<https://developer.apple.com/library/prerelease/mac/documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/index.html#//apple_ref/occ/intfm/NSObject/zone>

よろしくおねがいします！


CC BY-SA 3.0
2015-11-02T03:58:15.797
18314
2015-11-02T19:45:02.973
2015-11-02T19:45:02.973
76
207
question
objective-c
NSMutableArrayのzoneメソッドについて


推測されている通り、`zone`は`NSObject`のメソッドです。`NSArray`や`NSMutableArray`などObjective-
Cの（厳密にはCocoaの）クラスはほとんどが`NSObject`を継承しているので、`NSObject`が持つメソッドを利用できます。

サンプルにある`allocWithZone:`はメモリリソースが限られていた頃には有効でしたが、現在はシステムに任せるほうが効率がいいので非推奨になり、指定しても意味のない値になっています。


CC BY-SA 3.0
2015-11-02T07:05:46.490
18319
2015-11-02T07:05:46.490
5519
18314
answer