1

아이폰 용으로 개발 한 경험이 있지만 스스로 가르치고 있으며 실습을 개선하려고합니다. 이것은 아마도 프로그래밍에 대해 꽤 입문적인 질문입니다.Objective-C에서 개체 인스턴스간에 데이터를 유지 관리하는 방법은 무엇입니까?

인스턴스 변수를 객체의 모든 인스턴스에 공통된 값으로 유지하는 가장 좋은 방법은 무엇입니까? 객체와 그 속성의 생성, 수정 및 검사를 다른 장소에서 수행 할 수 있습니까?

사용자가 화면을 스 와이프 한 횟수를 추적하는 개체가 있다고 가정 해보십시오. 예를 들어 AppDelegate에서 해당 객체를 할당 한 다음 다른 뷰 컨트롤러에서 해당 객체의 카운트 변수를 증가시킬 수 있습니까?

인스턴스 변수가 속한 객체의 모든 인스턴스에서 공유되도록 인스턴스 변수를 정의 할 수 있습니까? 그것은 문제를 해결할 것입니다.

내가 추적을 유지하기 위해 필요하고 그냥이처럼 그들을 액세스 한 이런 것들에 대한 내 AppDelegate에의

지금까지, 난 그냥했습니다 인스턴스 변수 :

((MyAppDelegate *)[UIApplication sharedApplication].delegate).instanceVariable 

하지만 난하지 않습니다 그것이 좋은 연습인지 아닌지 아십시오. 아마도 그렇지 않습니다.

아마도 이것은 전역 변수 또는 싱글 톤과 관련이 있습니다. 또는 위에 나타나는 접두어 "공유"및 다른 장소에서도 본 적이 있습니다. 나는 조언이나 방향을 찾고 있습니다. 이 질문이 의미가 있고 너무 일반적이지 않기를 바랍니다.

답변

2

당신이 묻는 질문에는 상황에 따라 다른 관행이 필요하다고 생각합니다. ViewController간에 데이터를 공유하는 방법은 여러 가지 해결책이있는 질문 중 하나입니다. 더 나은 방법은 모든 ViewController에 대한 대리자를 사용하는 것입니다. 당신이 클래스 객체가 올 경우에도, 모든 자신의 개체를 관리하고 갈 수 있도록하려면

, 당신은 할 수있는 두 가지 중 하나를

  1. 이 클래스는 싱글을 확인하고 추적 (필요할 경우) 자신을 생성하고 처리해야 할시기를 알기 위해 할당 및 할당 해제를 수행합니다. 이것은 더 많은 작업 일지 몰라도 나쁜 일은 아닙니다.

  2. 다른 클래스의 개체를 관리하는 컨트롤러 클래스를 만듭니다. 좋은 예가 viewcontroller 클래스에 의해 제어되는 뷰 클래스 일 수 있습니다.

다른 사람들이 제안하는 것을 보도록하겠습니다.

+0

델리게이트 접근법을 사용할 때의 문제점은 뷰 컨트롤러의 수가 커짐에 따라 매개 변수를 계속 전달해야하며 실제로 처음 뷰 컨트롤러와 마지막 뷰 컨트롤러 만 실제로는 여러 뷰 컨트롤러를 통해 값을 전달한다는 것입니다. 가치에 대해 전혀 신경 쓰지 마라. 이러한 이유로 나는 싱글 톤을 같은 값으로 그룹화하는 것을 선호하므로 코드에서 가장 합리적인 곳에서 값을 저장하고 사용할 수 있으며 모든 곳에서 물건을 전달할 필요가 없습니다. AppDelegate에 물건을 담는 것보다 적어도 하나의 싱글 톤을 만드는 것을 선호합니다. –

0

싱글 톤을 리소스 관리자로 사용하려고합니다. 아마도 리소스 관리자 부분은 필요하지 않지만 싱글 톤이 크게 도움이 될 것입니다.

1

C++이나 Java (등등)에서 당신이 찾고자하는 것은 "정적 인스턴스 변수"입니다. 이것은 당신이 묘사하는 것과 정확히 일치합니다 : 클래스의 모든 인스턴스가 공유하는 인스턴스 변수. Objective-C는 그러한 짐승을 가지고 있지는 않지만, 일반적인 C 구문을 사용하여 매우 비슷한 것을 제공 할 수 있습니다.

이 페이지 하단 참조 : 페이지가 사라지는 경우 :이 경우

@interface MyClass 
{ 
    // ... 
} 
+ (NSString *)myVar; 
+ (void)setMyVar:(NSString *)newVa; 
@end 

@implementation MyClass 
static NSString *myVar; 
+ (NSString *)myVar { return myVar; } 
+ (void)setMyVar:(NSString *)newVar { myVar = newVar; } 
@end 

이 코드의 http://iosdevelopertips.com/objective-c/java-developers-guide-to-static-variables-in-objective-c.html

(복사 "myVar에"는하는 .m 파일에 전역 하지만 "정적"(C 속임수)으로 표시되기 때문에 컴파일러는 해당 파일이있는 .m 파일로만 파일을 볼 수 있도록 제한합니다 (이 경우와 마찬가지로 사용하면 멀티 스레드 액세스를 계속 주시합니다).

FWIW, b 일반적으로 강건해야하는 것을 갖추면 모든 사람이 공유하는 싱글 톤 형 객체가 좋은 방법입니다. 당신이 그렇게한다면 모든 정상적인 Obj-C 장점 (원하는 경우 mem 관리)을 얻게됩니다.

1

맷 갤러거 (Matt Gallagher)는 정확하게이 문제에 대한 훌륭한 기사를 게시했습니다. Cocoa with Love에서 확인할 수 있습니다.

그러나 mahboudz와 같은 다중보기 컨트롤러 패턴에서는 위임이 선호됩니다.

0

앱 위임의 모든 것을 유지하고 필요한 곳에 액세스하는 것은 확실히 나쁜 습관입니다. 최소한 코드 재사용은 까다로워졌습니다. 새 앱을 만들고 뷰나 컨트롤 또는 시스템의 일부를 사용하려는 경우 새 앱 대리인이 모든 올바른 선택기와 속성을 구현하는지 확인해야합니다. 또한 앱이 커지면 앱 위임자가 더 커지고 복잡해지고 다루기가 더 어려워집니다.
특정 문제에 관련된 코드 조각을 정확하게 작성하는 것이 어려워지기 때문에 디버깅도 어려워집니다.

내가하는 일은 앱의 어느 부분에 실제로 어떤 정보가 필요한지를 스케치하고 작성된 ViewController에 정보를 전달하는 것입니다.